JS заполнить массив fill vs push
Нужно создать и заполнить массив, вот два варианта но работают они по разному:
this.d = new Array(7).fill(new SH());
или так
this.d = [];
for(let t =0;t<7;++t){
this.d.push(new SH());
}
Объясните в чем разница и в чем дело, потому что следующая функция возвращает разные результаты:
this.d.forEach((p, i) => {
p.w = returnTrueOrFalse(i);
console.log('#i',i, p)
})
console.log('RES',this.d);
А вот результат:
первый вариант 
Полный бред, все булевы поля обнулились в false. При этом числовые поля остались нормальными.
Во втором варианте все нормально и оба console.log возвращают одинаковый результат.
Я не знаю в чем ошибка. Спасибо!
Ответы (1 шт):
Метод
fill()заполняет все элементы массива от начального до конечного индексов одним значением....
Если аргумент
value является объектом, тo методfillзаполнит массив ссылками на этот объект.
Таким образом, new Array(7).fill(new SH()) заполнит массив одним и тем же экземпляром SH, т.е. будет массив элементы которого ссылаются на один и тот же объект.
Для решения вашей задачи через метод fill() можно сделать так:
new Array(7).fill(0).map(() => new SH())