快速 JavScript 问题。在下面的代码片段中,我正在反转传递给函数 reverseArray
的数组 arr
。
在第一段代码中,看起来局部变量 arr
一直在变化,即使在循环中我正在对变量 newArr
进行操作,它保存了初始值arr
的值。因此,当 arr.length 达到值 3
时,循环失败。
function reverseArray (arr) {
var newArr = [];
var inArr = arr;
console.log(inArr);
for (i = 0; i < arr.length; i++) {
newArr[i] = inArr.pop(i);
}
return newArr;
}
reverseArray(["A", "B", "C", "D", "E", "F"]);
// OUTPUT: ["F", "D", "E"]
另一方面,如果我将 arr.length
存储在局部变量 numArr
上,那么它会完美地工作并反转数组。
function reverseArray (arr) {
var numArr = arr.length;
var newArr = [];
for (i = 0; i < numArr; i++) {
let inArr = arr;
newArr[i] = inArr.pop(i);
}
return newArr;
}
reverseArray(["A", "B", "C", "D", "E", "F"]);
// OUTPUT: ["F", "E", "D", "C", "B", "A"]
我错过了什么?
最佳答案
您可以复制数组并使用副本的长度来检查下一个 pop/push 命令。
function reverseArray(array) {
var newArr = [],
inArr = array.slice(); // take copy of primitive values
while (inArr.length) { // check decrementing length
newArr.push(inArr.pop());
}
return newArr;
}
console.log(reverseArray(["A", "B", "C", "D", "E", "F"]));
要满足条件,您也可以使用 for
语句。
function reverseArray(array) {
var newArr = [],
inArr = array.slice(); // take copy of primitive values
for(; inArr.length; ) { // check decrementing length
newArr.push(inArr.pop());
}
return newArr;
}
console.log(reverseArray(["A", "B", "C", "D", "E", "F"]));
关于javascript - 使用 for 循环反转数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50999847/