Прошу объяснить работу тернарного оператора при обходе массива

Я не понимаю, что происходит в условии:

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
}, {})
→ Ссылка