我正在研究数据结构,显然不了解引用的工作原理。
我试图在不创建新数组的情况下反转数组。因此,我认为我需要将值之一存储在局部变量中(在这种情况下为x),但即使这样,它也不会更新。
Person, Trip,Origin, Destination
1,1,US, Japan
1,2,Japan, US,
2,1,China, US
2,2, US, Japan
2,3, Japan, China
我的预期结果应该是任何颠倒的数组。
//→[5,4,3,2,1]
但是我只是得到
//→[1、2、3、4、5]
答案 0 :(得分:2)
您应将要替换的值存储在x
中,如下所示:
let x = arr[arr.length - 1 - i];
...然后将其替换(即:执行arr[arr.length - 1 - i] = arr[i]
),然后使用x
(刚替换的值)将arr[i]
的值设置为“交换”两个值
请参见以下示例:
function reverseArrayInPlace(arr){
for (var i = 0; i < Math.floor(arr.length / 2); i++){
let x = arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = arr[i];
arr[i] = x;
}
return arr;
}
let arrayValue = [1, 2, 3, 4, 5];
reverseArrayInPlace(arrayValue);
console.log(arrayValue);
答案 1 :(得分:1)
由于您正在使用let
,所以我假设您正在使用ES2015功能。您可以使用destructuring来swap个数组项。
function reverseArrayInPlace(arr){
for (var i = 0; i < Math.floor(arr.length / 2); i++){
[arr[arr.length - 1 - i], arr[i]] = [arr[i], arr[arr.length - 1 - i]]
}
return arr;
}
let arrayValue = [1, 2, 3, 4, 5];
reverseArrayInPlace(arrayValue);
console.log(arrayValue);
答案 2 :(得分:0)
您可以尝试使用:
function reverseArrayInPlace(arr){
for (var i = 0; i < Math.floor(arr.length / 2); i++){
let temp = arr[i];
arr[i] = arr[arr.length - i - 1];
arr[arr.length - i - 1] = temp;
}
return arr;
}
答案 3 :(得分:0)
您的问题很少。
首先,您需要将值存储在x
中,而不是 index 中。如果要交换值,则将覆盖两个值之一,这就是为什么需要它的副本。
第二,行arr[i] = arr[x]
不正确-arr[x]
与x = i
的行实际上只是arr[i] = arr[i]
。同样,如前所述,该值将被覆盖,因此您要保存一个值并将 that 分配给新位置,否则,您将链接到覆盖的值并在两个位置都将其复制。
function reverseArrayInPlace(arr){
for (var i = 0; i < Math.floor(arr.length / 2); i++){
//arr[arr.length - 1 - i] will be overwritten, so saving that value as x
let x = arr[arr.length - 1 - i];
//overwrite the the value
arr[arr.length - 1 - i] = arr[i];
//swap the old value to a new position
arr[i] = x;
}
return arr;
}
let arrayValue = [1, 2, 3, 4, 5];
reverseArrayInPlace(arrayValue);
console.log(arrayValue);