Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.04.2022, 10:48
Аспирант
Отправить личное сообщение для kpripper Посмотреть профиль Найти все сообщения от kpripper
 
Регистрация: 02.04.2011
Сообщений: 33

Одинаковые операции дают разный результат
Привет, вроде одинаковый код, но в первом случае получаем объект { 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); 
}, {});
Ответить с цитированием
  #2 (permalink)  
Старый 28.04.2022, 10:53
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

Сообщение от kpripper
первом случае получаем объект
???
в первом случае у вас массив строка 1, во втором объект строка 15
Ответить с цитированием
  #3 (permalink)  
Старый 28.04.2022, 11:04
Аспирант
Отправить личное сообщение для kpripper Посмотреть профиль Найти все сообщения от kpripper
 
Регистрация: 02.04.2011
Сообщений: 33

Ответить с цитированием
  #4 (permalink)  
Старый 28.04.2022, 11:24
Аспирант
Отправить личное сообщение для kpripper Посмотреть профиль Найти все сообщения от kpripper
 
Регистрация: 02.04.2011
Сообщений: 33

Кажется понял. Объект { "4": 1 } получается потому, что мы ложим результат условного оператора в элемент acc[item], и item в данном случае 4, а не 0.

В первом случае значение получается 5, потому что array[0] существует, а втором 1, потому что свойство "4" со значением 1 еще не существует, мы его получим после выполнения условного оператора.
Ответить с цитированием
  #5 (permalink)  
Старый 29.04.2022, 09:04
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,571

Вы reduce просто как то совсем странно используете.

Вот сигнатура ее функции:
function(previousValue, currentValue [, currentIndex, array]

, а вы в previousValue загоняете пустой объект, вот оно в нем и смотрит, да и функция должна возвращать результат.
Лучше скажите чего вы добиваетесь этим кодом.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разный результат работы $.ajax в почти идентичных условиях Maklay AJAX и COMET 3 23.06.2018 18:30