@xxxxc

Как reduce добавляет объекты в новый массив?

Здравствуйте, помогите разобраться!
Искал в интернете, не смог найти, сори за нубский вопрос если что.

Интересует строка "prevValues[currItem] = 1"
Как через неё добавляется элемент в массив и еще заодно создаётся новый объект типа "Bob': 1" ?
Здесь какие-то скрытые механизмы или что? Было бы лучше понятно если хотя-бы использовался push() или вместо массива [] для initialValue передавал бы объект {}.

var names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];
var countedNames = names.reduce(function (prevValues, currItem) { 
	if (currItem in prevValues){
		prevValues[currItem]++;   
	}else{
		prevValues[currItem] = 1;  //1)  Как это работает? 
	}
	return prevValues;
}, []);
 console.log(countedNames) //   [Alice: 2, Bob: 1, Tiff: 1, Bruce: 1]
  • Вопрос задан
  • 122 просмотра
Решения вопроса 1
Stalker_RED
@Stalker_RED
Да, было бы понятнее, если бы в качестве initial value передавался бы объект {}

Человек который вписал туда [] - редиска, сбивает с толку.

А работает все потому, что массив, это на самом деле разновидность объекта
let x = []
console.log(typeof x) // → внезапно "object"


Array расширяет возможности объекта, но почти все базовые плюшки будут продолжать работать.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
k12th
@k12th
console.log(`You're pulling my leg, right?`);
Используется тот факт, что массивы в JS одновременно являются объектами и почти любому объекту можно добавить произвольное свойство.
Я бы за такой код давал клавой по пальцам, потому что вещи все-таки должны использоваться по назначению. И если в строке 8 написать }, {}); то ничего функционально не изменится.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы