Javascript 如何使用order array对对象数组进行重新排序?

Javascript 如何使用order array对对象数组进行重新排序?,javascript,arrays,ecmascript-6,Javascript,Arrays,Ecmascript 6,我需要对数组中的一些对象重新排序 假设这是我的数据数组: const data = [ { id: 'ETHUVMY0m', name: 'item 1', value: 'value 1' }, { id: 'McfTB40vO', name: 'item 2', value: 'value 2' } ] 还有另一个数组,代表新的顺序: const order = [ 'McfTB40vO', 'ETHUVMY0m' ] 如您所见,第二项位于第一位 因此,结果应该是: [ {

我需要对数组中的一些对象重新排序

假设这是我的数据数组:

const data = [
  { id: 'ETHUVMY0m', name: 'item 1', value: 'value 1' },
  { id: 'McfTB40vO', name: 'item 2', value: 'value 2' }
]
还有另一个数组,代表新的顺序:

const order = [ 'McfTB40vO', 'ETHUVMY0m' ]
如您所见,第二项位于第一位

因此,结果应该是:

[
  { id: 'McfTB40vO', name: 'item 2', value: 'value 2' },
  { id: 'ETHUVMY0m', name: 'item 1', value: 'value 1' }
]
我考虑使用forEach循环:

data.forEach(d => {
  order.indexOf(d.id) // get new index
  // but how to reorder the array?
})

如果您希望以不变的方式执行此操作,请使用map and find,而不是forEach:

常数数据=[ {id:'ETHUVMY0m',名称:'item 1',值:'value 1'}, {id:'McfTB40vO',名称:'item 2',值:'value 2'} ]; 常量顺序=['McfTB40vO','ETHUVMY0m']; const result=order.mapid=>data.findx=>x.id==id;
console.logresult 如果您希望以不变的方式执行此操作,请使用map and find,而不是forEach:

常数数据=[ {id:'ETHUVMY0m',名称:'item 1',值:'value 1'}, {id:'McfTB40vO',名称:'item 2',值:'value 2'} ]; 常量顺序=['McfTB40vO','ETHUVMY0m']; const result=order.mapid=>data.findx=>x.id==id; console.logresult 将数据按id转换为一组对象。然后在order数组上使用,并从映射中获取相关项:

常数数据=[ {id:'ETHUVMY0m',名称:'item 1',值:'value 1'}, {id:'McfTB40vO',名称:'item 2',值:'value 2'} ] 常量顺序=['McfTB40vO','ETHUVMY0m'] const dataMap=new Mapdata.mapo=>[o.id,o] const result=order.mapid=>dataMap.getid console.logresult根据id将数据转换为一组对象。然后在order数组上使用,并从映射中获取相关项:

常数数据=[ {id:'ETHUVMY0m',名称:'item 1',值:'value 1'}, {id:'McfTB40vO',名称:'item 2',值:'value 2'} ] 常量顺序=['McfTB40vO','ETHUVMY0m'] const dataMap=new Mapdata.mapo=>[o.id,o] const result=order.mapid=>dataMap.getid console.logresult您可以映射订单:

常数数据=[{ id:'ETHUVMY0m', 名称:“项目1”, 值:“值1” }, { id:'McfTB40vO', 名称:“项目2”, 值:“值2” } ] 常量顺序=['McfTB40vO','ETHUVMY0m'] const output=order.mapd=>data.find{ 身份证件 }=>d==id; console.logoutput 您可以映射到订单:

常数数据=[{ id:'ETHUVMY0m', 名称:“项目1”, 值:“值1” }, { id:'McfTB40vO', 名称:“项目2”, 值:“值2” } ] 常量顺序=['McfTB40vO','ETHUVMY0m'] const output=order.mapd=>data.find{ 身份证件 }=>d==id;
console.logoutput;您将构建自己的自定义排序并将自定义函数传递给Sorty您将构建自己的自定义排序并将自定义函数传递给Sorti如果您在使用Array.prototype.map之前将订单放入一个中,您可以在中执行此操作,而不是使用Array.prototype.find。@PatrickRoberts我不明白您的建议。你能举个例子吗?@user3142695,看看Ori Drori的答案,使用Map.get解决方案比使用findi更有效。如果你在使用Array.prototype.Map之前订购了一个,你可以用On来代替Array.prototype.find。@PatrickRoberts我不明白你的建议。你能举个例子吗?@user3142695,看看Ori Drori使用Map.get的答案,这比使用find更有效