使用indexOf进行元组交换

时间:2019-05-29 14:36:13

标签: javascript arrays tuples

我正在尝试通过元组交换和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]

我如何找回整个阵列?

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)