Одинаковые операции дают разный результат
Привет, вроде одинаковый код, но в первом случае получаем объект { 0: 5 }, а во втором { "4": 1 }. Почему так?
let array = [4] //если элемент существует, прибавляем 1 и возвращаем сумму array[0] = array[0] ? array[0] + 1 : 1; //выводит массив, то есть объект у которого свойство 0 имеет значение 5 console.log(array); //делаем то же самое let array2 = [4] array2.reduce((acc, item) => { acc[item] = acc[item] ? acc[item] + 1 : 1; //выводит объект, у которого свойство 4 имеет значение 1 console.log(acc); }, {}); |
Цитата:
в первом случае у вас массив строка 1, во втором объект строка 15 |
![]() |
Кажется понял. Объект { "4": 1 } получается потому, что мы ложим результат условного оператора в элемент acc[item], и item в данном случае 4, а не 0.
В первом случае значение получается 5, потому что array[0] существует, а втором 1, потому что свойство "4" со значением 1 еще не существует, мы его получим после выполнения условного оператора. |
Вы reduce просто как то совсем странно используете.
Вот сигнатура ее функции: function(previousValue, currentValue [, currentIndex, array] , а вы в previousValue загоняете пустой объект, вот оно в нем и смотрит, да и функция должна возвращать результат. Лучше скажите чего вы добиваетесь этим кодом. |
Часовой пояс GMT +3, время: 07:06. |