Javascript 带indexOf的元组交换

Javascript 带indexOf的元组交换,javascript,arrays,tuples,Javascript,Arrays,Tuples,我试图用元组交换和indexOf() 应等于:[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] 如何取回整个数组?您可以使用数组映射功能并检查索引映射将返回一个新数组 让数组1=[1,2,3,4,5,6,7,8];

我试图用元组交换和
indexOf()

应等于:
[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]

如何取回整个数组?

您可以使用数组映射功能并检查索引<代码>映射将返回一个新数组

让数组1=[1,2,3,4,5,6,7,8];
让newArray=array1.map(函数(项,索引){
如果(索引==2){
返回数组1[索引+1]
}否则如果(索引===3){
返回数组1[索引-1]
}否则{
退货项目
}
})

console.log(newArray)
您正在使用解构赋值来交换元素,但在这种情况下它会起作用,因为
数组.indexOf(4)
更改为
2
。所以在第一次赋值之后,数组看起来像

[1,2,4,4,5,6,7,8]
在第二个赋值中,索引(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`
请参阅下面的代码片段

设arr=[1,2,3];
[arr[1],arr[console.log(arr[1])| | 5]=['changed',3]
尝试以下方法:

const index1 = array1.indexOf(3);
const index2 = array1.indexOf(4);

[ array1[index1], array1[index2] ] = [ array1[index2], array1[index1] ];
演示:

constarray1=[1,2,3,4,5,6,7,8];
log('array1 before:',array1);
常数index1=数组1.indexOf(3);
常数index2=数组1.indexOf(4);
[array1[index1],array1[index2]=[array1[index2],array1[index1]];

log('array1 after:',array1)
array1
。。。您的预期结果是什么?有没有办法使用元组交换方法来实现这一点?我不是简单地将这个数组中的对应元素分配给新值吗?几乎没有理由仅仅为了交换两个值而在整个数组中循环。从post OP中可以清楚地看出,OP希望在价值基础上交换,而不是在索引基础上交换。希望你得到了它。如果你认为OP希望交换索引,那么为什么不
[arr[2],arr[3]=[arr[3],arr[2]]
@MaheerAli,这就是否决投票的原因?你让我相信indexOf不会循环?这是一个有效的答案@MaheerAli两张
indexOf
几乎比一张地图好。仅供参考。这是可行的,但我试图模拟一个你不一定知道索引的问题。您将只知道该值,然后派生数组的索引
const index1 = array1.indexOf(3);
const index2 = array1.indexOf(4);

[ array1[index1], array1[index2] ] = [ array1[index2], array1[index1] ];