当我只在forEach方法中使用console.log()时,它会记录所有Array元素,但是当我在它里面使用。push(array.pop())时,它停在一些元素上?
const sentence = ['sense.','make', 'all', 'will', 'This'];
function reverseArray(array) {
debugger;
let newArray = [];
array.forEach((arr) => {
newArray.push(array.pop())
console.log(arr)
})
return newArray;
}
console.log(reverseArray(sentence))
// RESULT [
// "This",
// "will",
// "all"
// ]
但是这里可以
const sentence = ['sense.','make', 'all', 'will', 'This'];
function reverseArray(array) {
debugger;
array.forEach((arr) => {
console.log(arr)
})
}
reverseArray(sentence)
// Now it works
// RESULT
// sense.
// VM94:7 make
// VM94:7 all
// VM94:7 will
// VM94:7 This
你正在修改你的数组,同时迭代它。相反,你应该像这样复制它:
Array.from(array).forEach((elm) => {
newArray.push(array.pop())
console.log(elm)
})
// another variant for old browsers
array.slice().forEach((elm) => {
newArray.push(array.pop())
console.log(elm)
})
或者,由于在回调中不需要元素,您应该使用简单的for
loop
const count = array.length
for (let i=0; i < count i++) {
newArray.push(array.pop())
console.log(arr)
}