我正在通读 Eloquent Javascript 并面对其中一个练习,我发现了一个相当奇怪的行为。 (至少对我而言)
练习要求创建一个函数来反转数组。我想我可以遍历数组,每次从原始数组中弹出一个项目并将其插入一个最终将被返回的临时数组。 但是当我使用 for-of 循环或典型的顺序循环遍历数组时,不会传输最后一项。
谁能告诉我到底发生了什么?
const reverseArray = function(array) {
let rev = [];
for (let x = 0; x <= array.length; x++) {
rev.push(array.pop());
console.log(rev, array)
}
return rev;
};
console.log(reverseArray(["A", "B", "C"]));
输出:
["C"] ["A", "B"]
["C", "B"] ["A"]
["C", "B"]
最佳答案
当 pop()
应用于 array
时,它会减少 array
的长度,因此当循环运行时,它会发现一项少于前一个数组长度。因此,您可以做的只是将 array
的长度分配给一个变量,并在 for
循环的比较中使用它:
let rev = [];
const reverseArray = function(array) {
var length = array.length;
for (let x = 0; x < length; x++) {
rev.push(array.pop());
}
return rev;
};
console.log(reverseArray(["A", "B", "C"]));
关于javascript - 在 JavaScript 中遍历数组时的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49334459/