#javascript #node.js
#javascript #node.js
Вопрос:
Такое ощущение push
, что он ведет себя забавно. Вместо того, чтобы просто нажимать на 1 индекс внутри forEach
, кажется, что он нажимает на все 3 индекса. Я упускаю что-то очевидное?
let arrayToReduce = [ [ 1, 2, 3 ] ]
let reduced = arrayToReduce.reduce((arr, inner) => {
const copied = arr.slice()
inner.forEach((num, idx) => {
copied[idx].push(num)
})
return copied
}, Array(arrayToReduce[0].length).fill([]))
console.log(reduced)
Ожидаемый результат: [[1], [2], [3]]
Фактический результат: [[1, 2, 3], [1, 2, 3], [1, 2, 3]]
Ответ №1:
push
это не виновник, это так fill
.
Вы создали массив той же длины, что и исходный, а затем заполнили его значением.
Это значение представляет собой массив.
Тот же самый массив.
Поэтому, когда вы вводите значение copied[0]
, вы получаете ссылку на этот массив и помещаете в него значение.
И когда вы вводите значение copied[1]
, вы получаете ссылку на тот же массив и помещаете в него другое значение.
Ответ №2:
let arr = [ [ 7, 3, 47 ] ]
let reduced = arr.flat().map(e=>[e])
console.log(reduced)
// вывод: [[7], [3], [47]]
если вы хотите получить ожидаемый результат : [[1], [2], [3]]
Просто верните индекс вместо элемента во внутреннем массиве
let arr = [ [ 7, 3, 47 ] ]
let reduced = arr.flat().map((e,i)=>[i 1])
console.log(reduced)