Прошу объяснить работу тернарного оператора при обходе массива
Я не понимаю, что происходит в условии:
acc[item] = acc[item]
это значит, если значение acc[item] присвоится значению acc[item], значит возвращаем acc[item] + 1 - правильно?
const numbers = [4, 3, 3, 1, 15, 7, 4];
const countItems = numbers.reduce((acc, item) => {
acc[item] = acc[item] ? acc[item] + 1 : 1;
return acc;
}, {});
Ответы (1 шт):
Автор решения: vegasmoscow
→ Ссылка
В данном фрагменте acc[item] = acc[item] ? acc[item] + 1 : 1; оператор присваивания срабатывает в последнюю очередь. Всё, что находится справа от оператора присваивания, имеет более высокий приоритет и выполняется в первую очередь. А справа у вас обычное условие. И от того, что это условие вернёт, зависит что присвоится в acc[item].
Ваш код это то же самое, что и вот этот:
const numbers = [4, 3, 3, 1, 15, 7, 4]
const countItems = numbers.reduce((acc, item) => {
if (acc[item]) {
acc[item] = acc[item] + 1
} else {
acc[item] = 1
}
return acc
}, {})