注意:我现在一直在看代码几个小时,而且我开始质疑每个单词的拼写,或者我是否有阅读障碍 - 我知道这是一个简单的问题
我希望编写一个给定数组的基本函数(不使用标准JavaScript reverse
方法),以相反的顺序创建一个具有相同值的新数组。
为什么这个函数写成pop“C”和“B”,而不是“A”?
function reverseArray(arr) {
var reversedArr = [];
for (var i = 0; i < arr.length; i++) {
var popped = arr.pop(i);
reversedArr.push(popped);
}
return reversedArr;
}
console.log(reverseArray(["A", "B", "C"]));
这应该记录[“C”,“B”,“A”]但是它记录了→[“C”,“B”]当我在函数中记录arr时它保持在“A”。
我通过在for循环之后和返回语句之前添加reversedArr.push(arr.pop(arr[0]));
来解决这个问题,但是如果for循环被写为继续而i小于数组长度且数组只包含“A”,长度为1,i为0,不应该弹出“A”吗?
我在这里缺少什么?
答案 0 :(得分:1)
当您在数组上执行弹出操作时,它会永久地将该项目从数组中取出并更改其长度。见here
因此,在您的代码中,您应该使用
var popped = arr[i];
进行如下反向迭代:
for (var i = arr.length -1; i>=0 ; i--)
答案 1 :(得分:0)
试试这个,
function reverseArray(arr) {
var reversedArr = [];
while (arr.length > 0) {
reversedArr.push(arr.pop())
}
return reversedArr;
}
这是如何运作的?
pop
不接受参数,只删除最后一个元素,不需要跟踪索引。继续这样做,直到数组为空。