Javascript 将选定的数组索引移动到指定位置

Javascript 将选定的数组索引移动到指定位置,javascript,Javascript,我正在尝试根据选定ID对选定数量的数组重新排序。例如,我有一个数组: [ { id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }, { id: 5 } ] 以及所选id1,2,4。适当的安排应是: [ { id: 3 }, { id: 1 }, { id: 2 }, { id: 4 }, { id: 5 }] 我已经设法让安排为一个选定的id工作,但是当选择多个id时,它在不同的测试用例中失败。这些都与上面的输入相同 输入1:[1,2,4],移动到索引1: [

我正在尝试根据选定ID对选定数量的数组重新排序。例如,我有一个数组:

[ { id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }, { id: 5 } ]
以及所选id
1,2,4
。适当的安排应是:

[ { id: 3 }, { id: 1 }, { id: 2 }, { id: 4 }, { id: 5 }] 
我已经设法让安排为一个选定的id工作,但是当选择多个id时,它在不同的测试用例中失败。这些都与上面的输入相同

输入1:
[1,2,4]
,移动到索引
1

[ { id: 3 }, { id: 1 }, { id: 2 }, { id: 4 }, { id: 5 } ]
[ { id: 2 }, { id: 1 }, { id: 3 }, { id: 4 }, { id: 5 } ]
[ { id: 2 }, { id: 1 }, { id: 3 }, { id: 5 }, { id: 4 } ]
[ { id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }, { id: 5 } ]
输入2:
[1,3,4]
,移动到索引
1

[ { id: 3 }, { id: 1 }, { id: 2 }, { id: 4 }, { id: 5 } ]
[ { id: 2 }, { id: 1 }, { id: 3 }, { id: 4 }, { id: 5 } ]
[ { id: 2 }, { id: 1 }, { id: 3 }, { id: 5 }, { id: 4 } ]
[ { id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }, { id: 5 } ]
输入3:
[1,3,5]
,移动到索引
1

[ { id: 3 }, { id: 1 }, { id: 2 }, { id: 4 }, { id: 5 } ]
[ { id: 2 }, { id: 1 }, { id: 3 }, { id: 4 }, { id: 5 } ]
[ { id: 2 }, { id: 1 }, { id: 3 }, { id: 5 }, { id: 4 } ]
[ { id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }, { id: 5 } ]
输入4:
[1,2]
,移动到索引
0
1

[ { id: 3 }, { id: 1 }, { id: 2 }, { id: 4 }, { id: 5 } ]
[ { id: 2 }, { id: 1 }, { id: 3 }, { id: 4 }, { id: 5 } ]
[ { id: 2 }, { id: 1 }, { id: 3 }, { id: 5 }, { id: 4 } ]
[ { id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }, { id: 5 } ]
输入5:
[4,5]
,移动到索引
3
4

[ { id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }, { id: 5 } ]
/**
*移动数组的函数
*/
函数数组移动(arr、旧索引、新索引){
如果(新索引>=arr.length){
var k=新的_指数-arr.length+1;
而(k--){
arr.push(未定义);
}
}
arr.splice(新的_索引,0,arr.splice(旧的_索引,1)[0]);
};
/**
*函数来查找索引
*/
函数findWithAttr(数组、属性、值){
对于(变量i=0;i
从数组中删除与ID匹配的元素,并将它们放入新数组中。然后将新阵列拼接回原始阵列

函数移动数组元素(数组、ID、新索引){
设提取=[];
forEach(id=>{
让index=array.findIndex(el=>el.id==id);
如果(索引!=-1){
push(数组[索引]);
阵列拼接(索引1);
}
});
拼接(新的_索引,0,…提取);
返回数组;
}
常量数组=[{id:1},{id:2},{id:3},{id:4},{id:5}];

log(move_数组元素(orig_数组[1,2,4,1])从评论中的澄清,我想我理解你的问题。这就是我解决问题的方法:

函数sortArray(数组、sortProp、sortValue、sortIndex){
const elemsBySortVal=array.reduce((obj,elem,idx)=>{
obj[elem[sortProp]]=idx;
返回obj;
}, {});
让sortedKeys=sortValues.map(val=>elemsBySortVal[val]);
让sortedItems=sortedKeys.map(key=>array[key]);
让remainingItems=array.filter((x,idx)=>!sortedKeys.includes(idx));
返回[
…剩余项切片(0,排序索引),
,
…剩余项目切片(sortIndex),
];
}
控制台日志(sortArray)(
[{id:1},{id:2},{id:3},{id:4},{id:5}],
“id”,
[ 1, 2, 4 ],
1.

));您可以使用过滤器和拼接 请检查评论

让arr=[{id:1},{id:2},{id:3},{id:4},{id:5}];
设selected=[1,2,4];
让move_2_index=1;
//筛选出选定的
const selectedonly=arr.filter(a=>selected.includes(a.id));
//过滤掉未选中的内容
const notselected=arr.filter(a=>!selected.includes(a.id));
//要插入的接头在未选择的情况下选择D
未选择。拼接(移动索引,0,仅选择);
//整平阵型
final_array=notselected.flat();
console.log(最终_数组)使用
null
作为占位符 演示中的详细信息

演示
让arr=[{id:1},{id:2},{id:3},{id:4},{id:5}];
Array.prototype.move=函数(to,moveFrom){
//制作原始数组的副本
让它=[…这个];
//声明一个空数组
让moveTo=[];
/*
-将当前索引与移动数组(偏移量)中的数字进行比较
-将每个匹配项替换为null作为占位符,以便
数组的索引仍然是准确的。
-将每个匹配项放入上一步的空数组中。
*/
forEach(函数(obj、idx、arr){
if(moveFrom.indexOf(idx+1)!=-1){
moveTo.push(arr.splice(idx,1,null));
}
});
//删除所有空值
that=that.filter(函数(obj){
返回obj!==null;
});
/*
将新的移动数组插入到索引处复制的数组中
在第一个参数中指示。
*/
.splice(to,0,moveTo.flat())
把那个放回去。放平();
};
log(JSON.stringify(arr.move(1[1,3,4]));
log(JSON.stringify(arr.move(0[1,2,5]));
log(JSON.stringify(arr.move(3[1,2,3]));
log(JSON.stringify(arr.move(1[2,5]));

log(JSON.stringify(arr.move(2[1,4]))
在您的代码中,
aImageData
moveToSpecifiedInput()
中未定义。是否也输入了“移动到索引”?aImageData应该是需要排列的[{id:1}、{id:2}、{id:3}、{id:4}、{id:5}],我不知道你是使用0还是1-indexing,我看不出你的例子中“移动到索引2”和“移动到索引1”之间有什么区别。他们似乎都转向了指数1。“移动到索引0或1”是什么意思?谁来决定它是0还是1?这在不同的选定id上有问题,例如:[1,2,3]的选定id移动到索引1输出是4,1,2,3,5应该是1,2,3,4,5。[1,2]移动到索引1的输出是3,1,2,4,5应该是1,2,3,4,5[4,5]移动到索引3的输出是1,2,3,4,5应该是1,2,4,5,3此解决方案使用0索引,这是您的第一个示例使用的,以及1和3(可能还有4和5)。你在这里给我的例子是使用1-索引。你想要哪一个?想法是如果我有一堆id,例如6 id,那么数组可以移动到索引0,1,2,3,4,5如果我有[{id:1},{id:2},{id:3},{id:4},{id:5}],那么我选择了1,3,5,那么我将有[,{id:2},,{id:4}],然后我将选择