为什么这不起作用? PS。我不想使用任何其他变量使其工作,我不想使用内置函数,只是问为什么这不起作用?
function reverse(arr){
for(var i =0; i< arr.length; i++){
arr.push(arr[arr.length-i]);
}
return arr;
}
答案 0 :(得分:1)
您的代码中存在许多缺陷。
arr.push(arr[arr.length-i]);
时,阵列长度会增加,从而导致您无法获得数据的一致性。arr
都超过它的长度。最好使用另一个变量并反向,或者您可以使用内置的reverse()
函数。有另一个变量并在其中添加临时内容没有错。
<强>解决方案:强>
使用临时数组:
function reverse(arr) {
var final = [];
for (var i = arr.length - 1; i >= 0; i--) {
final.push(arr[i]);
}
return final;
}
function reverse(arr) {
return arr.reverse();
}
使用少量临时变量:
a = [5,4,3,2,1];
function reverse(arr) {
var i = 0, j = arr.length - 1;
for (i = 0; i < j; i++, j--) {
var temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
return arr;
}
console.log(reverse(a));
&#13;
答案 1 :(得分:0)
我不想使用任何其他变量来使其工作,我不想使用内置函数
你不能。
使用临时数组作为结果
function reverse(arr) {
var res = []
for (var i = arr.length - 1; i > -1; i--) {
res.push(arr[i]);
}
return res;
}
答案 2 :(得分:0)
你将失去记忆力。你正在做的是将最初的数组的最后一个元素无限地添加到数组的末尾。每次拨打arr.push(...)
时,您都会将arr.length
增加一个。您的for循环永远无法完成,因为i
永远不会少于arr.length