我正在尝试通过元组交换和indexOf()
array1 = [1, 2, 3, 4, 5, 6, 7, 8]
应等于:[1, 2, 4, 3, 5, 6, 7, 8]
[ array1[array1.indexOf(3)], array1[array1.indexOf(4)] ] =
[ array1[array1.indexOf(4)], array1[array1.indexOf(3)] ]
计算结果只是交换的元素,而不是数组本身。
[4, 3]
我如何找回整个阵列?
答案 0 :(得分:1)
尝试一下:
const index1 = array1.indexOf(3);
const index2 = array1.indexOf(4);
[ array1[index1], array1[index2] ] = [ array1[index2], array1[index1] ];
演示:
const array1 = [1, 2, 3, 4, 5, 6, 7, 8];
console.log('array1 before: ', array1);
const index1 = array1.indexOf(3);
const index2 = array1.indexOf(4);
[ array1[index1], array1[index2] ] = [ array1[index2], array1[index1] ];
console.log('array1 after: ',array1);
答案 1 :(得分:0)
您可以使用数组映射功能并检查索引。 map
将返回一个新数组
let array1 = [1, 2, 3, 4, 5, 6, 7, 8];
let newArray = array1.map(function(item, index) {
if (index === 2) {
return array1[index + 1]
} else if (index === 3) {
return array1[index - 1]
} else {
return item
}
})
console.log(newArray)
答案 2 :(得分:0)
您正在使用解构分配来交换元素,但是在这种情况下它将起作用,因为array.indexOf(4)
更改为2
。因此,第一个赋值数组看起来像这样。
[1,2,4,4,5,6,7,8]
在第二个分配中,indexOf(4)
返回2
。因此,您将第二个元素再次更改为3
。因此数组看起来相同。
该行与
相同array1[array1.indexOf(3)] = array1[array1.indexOf(4)] // array become [1,2,4,4,5,6,7,9]
array1[array1.indexOf(4)] = array1[array1.indexOf(3)] //here indexOf(4) is `2`
请参见下面的代码段
let arr = [1,2,3];
[arr[1],arr[console.log(arr[1]) || 5]] = ['changed',3]
因此,对于第二个元素,您的第一个元素已经更改。
您应该将索引存储在变量中,然后使用它。
let array1 = [1, 2, 3, 4, 5, 6, 7, 8]
let ind = array1.indexOf(3);
array1[array1.indexOf(4)] = 3;
array1[ind] = 4
console.log(array1)