我正在尝试解决这个问题而且我无法理解为什么函数reverseArrayInPlace不能按照我的意愿行事。函数中的console.log将返回一个反转数组,但是当我返回相同的内容时,我不会得到反转数组。
我是初学者所以请大家轻松解答。感谢
function reverseArray(array){
var x = [];
for (i=array.length - 1; i>=0; i--){
x.push(array[i]);
}
return x;
}
function reverseArrayInPlace(array){
console.log(reverseArray(array));
return reverseArray(array);
}
//console.log(reverseArray(["A", "B", "C"]));
// → ["C", "B", "A"];
var arrayValue = [1, 2, 3, 4, 5];
reverseArrayInPlace(arrayValue);
console.log(arrayValue);
// → [5, 4, 3, 2, 1]

编辑:感谢您的回复。我能否就这个功能得到一些反馈:
function reverseArrayInPlace(array){
for (i=1; i<array.length; i++){
var x = array[i];
array.splice(i,1);
array.unshift(x);
}
return array;
}
这似乎对我有用。你能看出它有什么问题吗?
答案 0 :(得分:1)
你没有在适当的位置反转阵列
在您正在创建新数组的函数中,然后以相反的顺序添加元素
在函数的第一行中创建一个新变量
var x = [];
除非您想在reverseArray中更改实现以处理这两种情况,否则您需要在reverseArrayInPlace函数中实现不同的解决方案
你需要
如果您愿意,可以选择返回数组,但由于进行了更改,因此您不需要
答案 1 :(得分:0)
reverseArrayInPlace()
功能实际上并未正常运作。它正在调用reverseArray()
,它正在创建一个新数组来存储元素。因此,它需要返回此值。
答案 2 :(得分:0)
为什么不呢......
var arrayValue = [1, 2, 3, 4, 5];
arrayValue = arrayValue.reverse();
console.log(arrayValue);
编辑:npm我看到你正在完成一个教程。 imo这是最优雅的方式。
答案 3 :(得分:0)
我在很长一段时间里都在努力解决同样的问题。要在没有.splice()或.reverse()的情况下完成此操作,请尝试以下操作。基本上,当你从数组的后面倒数时,你正在从数组的前面开始计数;当for循环中的倒计时“i”变量得到的位置数小于数组长度的一半时,值的交换应该停止。如果那里没有if语句,则值将交换回原始数组中的位置。那里有很多console.logs,所以你可以看到代码循环时发生了什么。
var testArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var reverseArrayInPlace = function(inputArray){
var countUp = 0;
for (i= (inputArray.length - 1); i>=0; i--){
var stash = inputArray[countUp];
if (i >= Math.floor(inputArray.length/2)){
inputArray[countUp] = (inputArray[i]);
inputArray[i] = stash;
console.log('stash:' + stash);
console.log('countUp:' + countUp);
console.log('i:' + i);
console.log('inputArray:' + inputArray);
console.log('iA.length:' +inputArray.length);
console.log('');
countUp ++;
}
}
return inputArray;
};
reverseArrayInPlace(testArray);