这是我的代码:
function reverseArray(array){
var newArray = [];
for (i = 0; i <= array.length + 1; i++)
newArray.unshift(array.shift());
return newArray;
};
我不明白为什么在for循环中条件不是i < array.length
。例如,当数组有3个元素时,在我看来,你需要循环数组3次,将每个元素移动到新数组中,但是当我尝试它时由于某种原因在控制台上(例如{{ 1}}),我必须将其更改为当前console.log(reverseArray(["a", "b", "c"]))
以获取代码以提供正确的输出i <= array.length + 1;
。我不明白为什么,如果有人可以帮助解释为什么["c", "b", "a"]
不起作用我会非常感激。谢谢!
答案 0 :(得分:2)
您的代码在if条件检查中是错误的,因为每次都是如此 在for语句中检查条件,所以array.lenght是 每次都改变,条件不应该是array.length + 1,你 可以尝试下面的代码
function reverseArray(array){
var newArray = [];
for (var i = 0,len=array.length; i < len; i++)
newArray.unshift(array.shift());
return newArray;
};
我建议使用Array的反向方法,但如果你愿意的话 制作一个新的数组副本,你可以使用Array.slice(),试试这个:
function reverseArray(array){
var newArray=array.slice()
newArray.reverse()
return newArray
}
答案 1 :(得分:1)
无论出于何种原因,如果你不能使用Array.prototype.reverse
,我会写这样的函数
function reverseArray(arr) {
var len = arr.length;
var rev = new Array(len);
for (var i=0, j=len-1; i<len; i++, j--) {
rev[i] = arr[j];
}
return rev;
}
reverseArray([1,2,3]);
// [3,2,1]
您可以看到此解决方案dominate the benchmarks。它比使用10个元素阵列(在Chrome中测试)的原生 Array.prototype.reverse
更快。