为什么我的函数只返回[3,2,]。它应该打印出元素1吗?
function reverseArr(arr) {
var reverse = [];
for (var i = 0; i < arr.length; i++)
reverse.push(arr.pop());
return reverse;
}
console.log(reverseArr([1, 2, 3]));
答案 0 :(得分:5)
因为您每次迭代都要修改arr
,arr.length
正在发生变化。试试这个:
function reverseArr(arr) {
var reverse = [], len = arr.length;
for (var i = 0; i < len; i++)
reverse.push(arr.pop());
return reverse;
}
但是,请注意,这将修改原始数组,这可能与您的意图不同。如果您想保留原始数组,请改用unshift
:
function reverseArr(arr) {
var reverse = [], len = arr.length;
for (var i = 0; i < len; i++)
reverse.unshift(arr[i]);
return reverse;
}
或者,您可以使用slice
和reverse
的组合返回输入数组的新的反转副本,而无需修改原始数据:
function reverseArr(arr) {
return arr.slice().reverse();
}
答案 1 :(得分:2)
问题是当你弹出它时你正在改变数组的长度。所以arr.length
从3开始然后是2然后1.相反,你可以这样做:
function reverseArr(arr) {
var reverse = [];
while (arr.length) {
reverse.push(arr.pop());
}
return reverse;
}
答案 2 :(得分:2)
或者
function reverseArr(arr) {
var reverse = [];
while (arr.length > 0)
reverse.push(arr.pop());
return reverse;
}
或者
function reverseArr(arr) {
var reverse = [];
for (var i = 0; i < arr.length; i++)
reverse.push(arr[arr.length - 1 - i]);
return reverse;
}
或只是arr.reverse()