Почему reduce не кладет элементы в список

177
15 августа 2021, 01:10

const example = ["1", "se", "thi", "four"].reduce((acc, el) => { 
    acc = el + '!!!' + el.length + '!!!'; 
    return acc 
  }, 
  []); 
console.log(example);

На выходе у нас four!!!4!!!
Хотя я ожидал увидеть все измененные элементы в списке.
Насколько я понимаю

,
[]

именно вот этот участок кода отвечает за то, куда будут накапливаться результаты.
Я поставил список и ожидал, что измененные элементы окажутся там, почему их там нет?

Answer 1

Потому, что reduce так не работает. Согласно документации:

array.reduce(callback[, initialValue])

callback(accumulator, element) - функция обратного вызова, которая принимает предыдущий результат accumulator и по очереди каждый элемент массива element.

initialValue - начальное значение для accumulator, если не задано, то оно равно первому элементу массива и в качестве element сразу передается второй элемент массива.

[1,2,3].reduce((acc, el) => { 
    console.log(acc, el) 
    acc = el + '!!!'; 
    return acc 
}, "это первое значение для accumulator");

Если вы хотели вернуть все в массиве, то нужно было их туда добавлять самостоятельно.

const example = ["1", "se", "thi", "four"].reduce((acc, el) => { 
    acc.push(el + '!!!' + el.length + '!!!'); 
    return acc 
  }, 
  []); 
console.log(example);

Или использовать Map для таких случаев.

const example = ["1", "se", "thi", "four"].map((el) => { 
    acc = el + '!!!' + el.length + '!!!'; 
    return acc 
  }); 
console.log(example);

READ ALSO
При конвертации canvas в DataURL выдаёт белое изображение

При конвертации canvas в DataURL выдаёт белое изображение

Проблема, собственно, описана в заголовке) Ниже мой кодБуду благодарен за любые идеи

115
Скрипт определения наличия блока

Скрипт определения наличия блока

Нужен скрипт, который будет установлен на странице indexhtml и будет на странице /$user_id проверять, есть ли там <div id="reverbs5", если да - то применять...

97
Как поменять имя атрибута у элемента?

Как поменять имя атрибута у элемента?

У меня есть много тегов <img> и у некоторых из них вместо data-src="путь/к/картинке" стоит data-lazy="путь/к/картинке", и это ломает lazyload на моем сайте

142