按另一个数组(长度较短)排序关联javascript数组的最有效方法?

按另一个数组(长度较短)排序关联javascript数组的最有效方法?,javascript,arrays,Javascript,Arrays,我有一个如下所示的数组: cPrefs = [0:{ id: 5, name: "Sixth thing" }, 1:{ id: 3, name: "Fourth thing" }, 2:{ id: 4, name: "Fifth thing" }, 3:{ id: 0, name: "First thing" }, 4:{ id: 2, name: "Third thing" }, 5:{ id: 1, name: "Second thing" }] cOrder = ["1",

我有一个如下所示的数组:

cPrefs = [0:{ id: 5, name: "Sixth thing" },
 1:{ id: 3, name: "Fourth thing" },
 2:{ id: 4, name: "Fifth thing" },
 3:{ id: 0, name: "First thing" },
 4:{ id: 2, name: "Third thing" },
 5:{ id: 1, name: "Second thing" }]
cOrder = ["1", "3", "2", "5"]
[0:{ id: 1, name: "Second thing" },
 1:{ id: 3, name: "Fourth thing" },
 2:{ id: 2, name: "Third thing" },
 3:{ id: 5, name: "Sixth thing" },
 4:{ id: 0, name: "First thing" },
 5:{ id: 4, name: "Fifth thing" }]
我还有另一个排序数组,如下所示:

cPrefs = [0:{ id: 5, name: "Sixth thing" },
 1:{ id: 3, name: "Fourth thing" },
 2:{ id: 4, name: "Fifth thing" },
 3:{ id: 0, name: "First thing" },
 4:{ id: 2, name: "Third thing" },
 5:{ id: 1, name: "Second thing" }]
cOrder = ["1", "3", "2", "5"]
[0:{ id: 1, name: "Second thing" },
 1:{ id: 3, name: "Fourth thing" },
 2:{ id: 2, name: "Third thing" },
 3:{ id: 5, name: "Sixth thing" },
 4:{ id: 0, name: "First thing" },
 5:{ id: 4, name: "Fifth thing" }]
我需要按第二个数组(具有ID)对第一个数组进行排序,并将未标识的对象保留在最后(以任意顺序)。因此,正确的最终排序可能如下所示:

cPrefs = [0:{ id: 5, name: "Sixth thing" },
 1:{ id: 3, name: "Fourth thing" },
 2:{ id: 4, name: "Fifth thing" },
 3:{ id: 0, name: "First thing" },
 4:{ id: 2, name: "Third thing" },
 5:{ id: 1, name: "Second thing" }]
cOrder = ["1", "3", "2", "5"]
[0:{ id: 1, name: "Second thing" },
 1:{ id: 3, name: "Fourth thing" },
 2:{ id: 2, name: "Third thing" },
 3:{ id: 5, name: "Sixth thing" },
 4:{ id: 0, name: "First thing" },
 5:{ id: 4, name: "Fifth thing" }]
我不确定实现这一目标的最佳方式。我试过了

const output = cOrder.map(i => cPrefs[i].id)

但是它抛出了我的其他值,我想我可以循环并重建数组,但我很好奇是否有更有效的方法。

您可以将一个对象作为排序顺序,并将未知的
id
以默认值
无限
移动到末尾

var cPrefs=[{id:5,名称:“第六件事”},{id:3,名称:“第四件事”},{id:4,名称:“第五件事”},{id:0,名称:“第一件事”},{id:2,名称:“第三件事”},{id:1,名称:“第二件事”},
cOrder=[1,3,2,5],
顺序=cOrder.reduce((r,k,i)=>(r[k]=i+1,r),{});
cPrefs.sort((a,b)=>(order[a.id]| | |无穷)-(order[b.id]| | |无穷));

控制台日志(cPrefs)
您可以将一个对象作为排序顺序,并使用默认值
无限
将未知的
id
移动到末尾

var cPrefs=[{id:5,名称:“第六件事”},{id:3,名称:“第四件事”},{id:4,名称:“第五件事”},{id:0,名称:“第一件事”},{id:2,名称:“第三件事”},{id:1,名称:“第二件事”},
cOrder=[1,3,2,5],
顺序=cOrder.reduce((r,k,i)=>(r[k]=i+1,r),{});
cPrefs.sort((a,b)=>(order[a.id]| | |无穷)-(order[b.id]| | |无穷));

控制台日志(cPrefs)
您是否考虑过使用
sort()
而不是
map()
?这个问题的可能重复遗漏了多维部分您是否考虑过
sort()
而不是
map()
?这个问题的可能重复遗漏了多维部分