我正在尝试编写一个函数,该函数可以反转数组的元素,而无需在函数中定义新的空数组。
let arrayValue = [1, 2, 3, 4, 5]
function remove(array, index) {
return array.slice(0, index).concat(array.slice(index + 1));
}
function reverseArrayInPlace(array) {
for (i = array.length - 2; i >= 0; i--) {
let removedCharacter = array[i];
array = array.concat(removedCharacter);
array = remove(array, i);
}
return array;
}
当我console.log(reverseArrayInPlace(arrayValue))时,我得到了[5,4,3,2,1]的相反顺序。
但是,当我尝试只执行reverseArrayInPlace(arrayValue)然后执行console.log(arrayValue)时,我得到的是[1、2、3、4、5],这是开头定义的值。
是否有一种方法可以更新函数中的arrayValue绑定,然后在函数外为console.log时,显示相反的顺序?
答案 0 :(得分:0)
// show cases of even and odd lengths
const x = [1,2,3,4];
const y = [1,2,3,4,5];
for (let i = 0; i < x.length / 2; i++) {
const tmp = x[i];
x[i] = x[x.length - 1 - i];
x[x.length - 1 - i] = tmp;
}
for (let i = 0; i < y.length / 2; i++) {
const tmp = y[i];
y[i] = y[y.length - 1 - i];
y[y.length - 1 - i] = tmp;
}
console.log(x);
// [4, 3, 2, 1]
console.log(y);
// [5, 4, 3, 2, 1]
答案 1 :(得分:0)
Array的slice和concat方法的MDN文档解释说,这些方法返回新数组,而不是修改现有数组。如果您正在寻找用于修改数组的内置Array方法,则splice将完成此工作。但是,使用splice
来实现这一点比其他答案所建议的仅仅使用for
循环要复杂得多。
答案 2 :(得分:0)
您可以像在数组中点附近对称地交换值,例如
const arr = [0,1,2,3,4];
const len = arr.length;
for(let i = 0; i < len/2; i++){
let temp = arr[i];
arr[i] = arr[len-1-i];
arr[len-1-i] = temp;
}
console.log(arr);
答案 3 :(得分:-1)
function reverseArrayInPlace(array) {
for (let i = 0; i < array.length / 2; i++) {
const oppositeArrayIndex = array.length - (i + 1);
const oppasiteArrayValue = array[oppositeArrayIndex];
array[oppositeArrayIndex] = array[i];
array[i] = oppasiteArrayValue;
}
}