Javascript 交换数组中的对象而不改变数组
我正在做DragnDroping,交换时需要交换元素,有一个对象数组,活动对象和被交换对象的索引,如何在js中交换它们而不改变原始对象Javascript 交换数组中的对象而不改变数组,javascript,reactjs,Javascript,Reactjs,我正在做DragnDroping,交换时需要交换元素,有一个对象数组,活动对象和被交换对象的索引,如何在js中交换它们而不改变原始对象 let allData = [{name:1},{name:2},{name:3}] 交换后我需要得到 [{name:2},{name:1},{name:3}] 举例说明我需要做什么 case CHANGE_TAB_ORDER: const {activeElementIndex} = action.payload;
let allData = [{name:1},{name:2},{name:3}]
交换后我需要得到
[{name:2},{name:1},{name:3}]
举例说明我需要做什么
case CHANGE_TAB_ORDER:
const {activeElementIndex} = action.payload;
const {swapedElementIndex} = action.payload
return {
...state,
stages: ? here i need to swap objects in array with activeElementIndex and swapedElementIndex
}
stages是对象数组如果要在数组中进行操作而不改变原始对象,则应首先创建一个副本,然后只需要一个temp变量来交换项,并返回新数组
const数组=[{name:1},{name:2},{name:3}]//原始对象
const arrayCopy=Object.assign({},array)//克隆对象!
功能交换(pos1、pos2、nextArray){
const temp=nextArray[pos1];//临时变量
nextArray[pos1]=nextArray[pos2];//交换项目
nextArray[pos2]=温度;
return nextArray;//返回数组
}
常量交换阵列=交换阵列(0,1,阵列复制);
console.log(swappedArray)//打印数组:)
而不进行修改您的意思是创建一个副本?然后像这样
const {activeElementIndex, swapedElementIndex} = action.payload
return {
...state,
stages: (stages => {
[stages[activeElementIndex], stages[swapedElementIndex]] =
[stages[swapedElementIndex], stages[activeElementIndex]];
return stages })([...state.stages])
}
(如果你想保存一个旧的,那么就用state.stages替换我代码中的[…state.stages]。这能回答你的问题吗?是的,但是我怎样才能正确地交换它们呢?我更新了我的问题答案中有什么让人困惑?其中一些函数提供了获取一个数组和两个索引并返回变异数组的函数。。。