#javascript
#javascript
Вопрос:
У меня есть этот массив, и я использую функцию filter и forEach (она работает просто отлично), но я хотел бы сделать это с помощью функции reduce javascript. Заранее большое спасибо?
Вот решение с использованием filter и forEach
arr
.filter(el => typeof el.value === 'string' amp;amp; el.value.includes('test'))
.forEach(el => {
if (el.key === 'cars') {
el.value = el.value.replace('test', 'TICO');
}
}
);
Комментарии:
1. Что вы пытаетесь сделать? Каков ваш ожидаемый результат?
2. @Yousaf Я пытаюсь сделать то же самое, но с функцией ‘reduce’ javascript
3. Действительно, я не думаю, что вы хотите уменьшить массив, и
forEach
он ничего не сделает, я думаю, вы хотитеmap
послеfiltering
массива4. Почему вы хотите использовать
.reduce()
метод, когда метод.filter()
and.map()
более подходит для выполнения того, что вы делаете5.
but I would like to do it using reduce javascript function
но почему?reduce
это неправильный инструмент для того, что вы делаете, так почему вы настаиваете на его использовании? Почемуreduce
, а неsome
для примера?
Ответ №1:
Может быть, это:
arr.reduce((all, el) => {
if ((el) => typeof el.value === 'string' amp;amp; el.value.includes('test'))
all.push({
...el,
value: el.key === 'cars' ? el.value.replace('test', 'TICO') : el.value,
});
return all;
}, []);
Комментарии:
1. В
push
части это должно быть...all
вместо...el
. В любом случае, я думаю, что он / она не хочет использоватьreduce
вместо просто afilter
и amap
2. @AgustinMoles это должно быть
...el
, а не...all
потомуall
, что весь массив3. @AgustinMoles на самом деле должно быть
...el
, потому что мы хотим нажать элемент с измененным значением, если ключcars
4. @losif Спасибо за твой вклад, брат!
5. @progx Нет проблем 💪
Ответ №2:
Но вам не нужно
filter()
. В настоящее время вы (ab) используете фильтр просто как еще одно условие для вашегоforEach
. Вы могли бы также просто переместить тело вашей функции фильтра внутри условия в вашемforEach
arr.forEach(el => {
if (typeof el.value === 'string' amp;amp; el.value.includes('test') amp;amp; el.key === 'cars') {
el.value = el.value.replace('test', 'TICO');
}
});
вы могли бы даже продолжить и сделать
arr.forEach(el => {
if (typeof el.value === 'string' amp;amp; el.key === 'cars') {
el.value = el.value.replace('test', 'TICO');
}
});
Я даже не думаю, что это менее эффективно, так как replace
в любом случае нужно «найти» строку test
.
Комментарии:
1. Большое спасибо за твою помощь, брат!
Ответ №3:
Это будет использовать ту же функцию Array.reduce
.
const result = arr.reduce((acc, el) => {
if (typeof el.value === 'string' amp;amp; el.value.includes('test')) {
acc.push({
...el,
value: el.key === 'cars' ? el.value.replace('test', 'TICO') : el.value
});
}
return acc;
}, []);
console.log(result);
Комментарии:
1. Спасибо за твой вклад, брат!