Javascript 如何对数组中的多个元素重新排序?

Javascript 如何对数组中的多个元素重新排序?,javascript,arrays,splice,array-splice,reorderlist,Javascript,Arrays,Splice,Array Splice,Reorderlist,我有一个数组arr: arr=[0,1,2,3,4,5] 如何重新排列/移动多个元素?比如说, 我想删除0,2和3并将它们放在索引4中,这样最终的数组应该是[1,0,2,3,4,5] 在上面的示例中,索引4是原始数组的透视图,而不是最终数组的透视图 我试着像这样使用splice: items = [0,2,3] // items to be reordered indexes = [0,2,3] // get their indexes arr = [...arr.filter((it)=&

我有一个数组
arr

arr=[0,1,2,3,4,5]

如何重新排列/移动多个元素?比如说,

  • 我想删除
    0,2和3
    并将它们放在索引4中,这样最终的数组应该是
    [1,0,2,3,4,5]
在上面的示例中,索引4是原始数组的透视图,而不是最终数组的透视图

我试着像这样使用splice:

items = [0,2,3] // items to be reordered
indexes = [0,2,3] // get their indexes
arr = [...arr.filter((it)=> !indexes.includes(arr.indexOf(it)))]
arr.splice(4, 0, ...items)
// result [1, 4, 5, 0, 2, 3]

以上不是预期结果

您可以先删除给定的元素,然后使用
splice()
将它们添加到所需索引处

功能移位远程登录(arr、inds、final){
let set=新set(inds);
let removed=inds.map(x=>arr[x]);
arr=arr.filter((x,i)=>!set.has(i));
阵列拼接(最终,0,…移除);
返回arr;
}

log(shiftElementsTo([0,1,2,3,4,5],[0,2,3],2))
您可以先删除给定的元素,然后使用
splice()
将它们添加到所需的索引中

功能移位远程登录(arr、inds、final){
let set=新set(inds);
let removed=inds.map(x=>arr[x]);
arr=arr.filter((x,i)=>!set.has(i));
阵列拼接(最终,0,…移除);
返回arr;
}
log(shiftElementsTo([0,1,2,3,4,5],[0,2,3,2))
const temp=[0,2,3];
常数arr=[0,1,2,3,4,5];
常数指数=arr[4];
//接受数组(temp)并返回要使用的函数
//作为接受元素的'filter'的回调
//并返回该元素是否在临时数组中
常数过滤器使用=(arr)=>(el)=>!包括(el);
//`filter`主数组中的元素
常数过滤=arr.filter(过滤使用(温度));
//在`索引中查找元素的新位置`
const newIndex=filtered.findIndex(el=>el==index);
//将临时阵列拼接回过滤阵列
过滤拼接(新索引,0,…温度);
console.log(过滤)
const temp=[0,2,3];
常数arr=[0,1,2,3,4,5];
常数指数=arr[4];
//接受数组(temp)并返回要使用的函数
//作为接受元素的'filter'的回调
//并返回该元素是否在临时数组中
常数过滤器使用=(arr)=>(el)=>!包括(el);
//`filter`主数组中的元素
常数过滤=arr.filter(过滤使用(温度));
//在`索引中查找元素的新位置`
const newIndex=filtered.findIndex(el=>el==index);
//将临时阵列拼接回过滤阵列
过滤拼接(新索引,0,…温度);

console.log(过滤)尝试使用此方法:

设arr=[0,1,2,3,4,5];
设rmv=[0,2,3];
常量移除=(src、rem、i)=>{
const arrhithindexes=src.map((a,i)=>{return{value:a,index:i});
const filtered=arrhithindexes.filter(f=>!rem.some(s=>s==f.value));
const indexToInsert=filtered.findIndex(f=>f.index==i);
const result=filtered.map(f=>f.value);
结果:拼接(indexToInsert,0,…rem);
控制台日志(结果);
}

控制台日志(删除(arr、rmv、4))尝试使用此方法:

设arr=[0,1,2,3,4,5];
设rmv=[0,2,3];
常量移除=(src、rem、i)=>{
const arrhithindexes=src.map((a,i)=>{return{value:a,index:i});
const filtered=arrhithindexes.filter(f=>!rem.some(s=>s==f.value));
const indexToInsert=filtered.findIndex(f=>f.index==i);
const result=filtered.map(f=>f.value);
结果:拼接(indexToInsert,0,…rem);
控制台日志(结果);
}

控制台日志(删除(arr、rmv、4))此解决方案使阵列发生变异

您可以将值存储在插入位置,删除项目,并将删除的项目拼接到存储项目的索引之后

var数组=[0,1,2,3,4,5],
删除=[0,2,3],
insertAtIndex=4,
valueAtPosition=数组[insertAtIndex];
remove.forEach(v=>array.splice(array.indexOf(v),1));
数组.拼接(数组.indexOf(valueAtPosition)+1,0,…删除);

log(…数组)此解决方案使阵列发生变异

您可以将值存储在插入位置,删除项目,并将删除的项目拼接到存储项目的索引之后

var数组=[0,1,2,3,4,5],
删除=[0,2,3],
insertAtIndex=4,
valueAtPosition=数组[insertAtIndex];
remove.forEach(v=>array.splice(array.indexOf(v),1));
数组.拼接(数组.indexOf(valueAtPosition)+1,0,…删除);

log(…数组)到目前为止您尝试了什么?更新了问题:如何才能将原始数组的索引,如果索引上有
3
,则
3
之后会生成
4
之后的值?我更正了错误并更新了问题您已编辑了问题,以便您所需的输出在索引1处具有拼接数据。到目前为止,您尝试了什么?更新了问题原始数组的索引如何,如果
3
位于索引
3
上,则在
4
之后生成值?我更正了错误并更新了问题您已编辑了问题,因此您所需的输出现在在索引1处具有拼接数据。最终索引应为3,而不是2,这毫无意义。在您的问题中,提取的数据位于所需输出的索引2处@HarisMuzaffar.抱歉更新注释:放置项目的索引是4,而不是3。提取的数据位于索引2,但
2
之前未知。已知的是索引
4
,该索引4与原始数组的透视图一致。最终索引应为3,而不是2,这毫无意义。在您的问题中,提取的数据位于所需输出的索引2处@HarisMuzaffar.抱歉更新注释:放置项目的索引是4,而不是3。提取的数据位于索引2,但
2
之前未知。这是已知的索引
4
,该索引4是原始数组的透视图
position             v
index    0  1  2  3  4
array   [0, 1, 2, 3, 4, 5]              store value at index
            1        4  5               rest array after removing items
            1        4 [0  2  3] 5      splice with removed items