var names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];
var countedNames = names.reduce(function (allNames, name) {
if (name in allNames) {
allNames[name]++;
}
else {
allNames[name] = 1;
}
return allNames;
}, {});
console.log(countedNames);
{Alice: 1}
. Как так получается, что элемент массива становится объектом, где свойство Alice равно 1? Почему не просто "Alice"
?"Alice"
, а не "Bob"
? Ведь по идее allNames, аккумулятор, равняется первому элементу массива names, а name - должен указывать на следующий?В параметре для reduce, который задает начальное значение стоит {}, т.е. объект. Поэтому все аккумулируется в объект. Когда объект пустой (на первой итерации) срабатывает
allNames[name] = 1;
здесь в allNames создается поле с именем по содержимому name и это поле инициализируется значением 1. Получается, что после обработки первого элемента массива allNames становится
{
Alice: 1,
}
Далее добавляется Bob и AllNames становится
{
Alice": 1,
Bob: 1,
}
и так до последнего элемента исходного массива. На последнем элементе срабатывает ветка else в
if (name in allNames) {
и выполняется
allNames[name]++;
в результате чего поле Alice принимает значение равное 2
При попытке собрать проект возникает ошибка
Как записать куки на ajax странице без перезагрузки страницы?
Очень коротко: есть 2 формыПри изменении значения поля file в Форме №1, стоит обработчик, который это значение записывает в другое поле в Форме...