javascript – 将一个对象数组根据另一个数组的顺序进行排序

javascript – 将一个对象数组根据另一个数组的顺序进行排序

有一个对象数组:

const origin = [{ id: 4, name: 'name4' }, { id: 3, name: 'name3' }, { id: 9, name: 'name9' }, { id: 1, name: 'name1' }]

有另一个对象数组,需要按此数组里面的某个字段进行排序

const sortKey =  [{sortId: 3, age: '333' }, { sortId: 1,age: '111'}, { sortId: 9, age: '999' }, { sortId: 4, age: '444' }]

根据sortKey的sortId,如何将第一个对象数组(origin)与第二个对象数组的排序相匹配?
结果应该是:

const origin = [{ id: 3, name: 'name3' }, { id: 1, name: 'name1' }, { id: 9, name: 'name9' }, { id: 4, name: 'name4' }]

方法:用sort以及indexOf解决了这个问题

const result = origin.sort(function(a, b){
  return sortKey.map(s => s.sortId).indexOf(a.id) < sortKey.map(s => s.sortId).indexOf(b.id) ? -1 : 1;
});
// result: [{ id: 3, name: 'name3' }, { id: 1, name: 'name1' }, { id: 9, name: 'name9' }, { id: 4, name: 'name4' }]

原文:https://www.jianshu.com/p/d0bfa535133b

例子:

const origin = [
{"pickCode":"JXD9823041200023","LAY_TABLE_INDEX":0},
{"pickCode":"JXD9823041200024","LAY_TABLE_INDEX":1},
{"pickCode":"JXD9823041200025","LAY_TABLE_INDEX":2},
{"pickCode":"JXD9823041200026","LAY_TABLE_INDEX":3},
{"pickCode":"JXD9823041200027","LAY_TABLE_INDEX":4},
{"pickCode":"JXD9823041200028","LAY_TABLE_INDEX":5},
{"pickCode":"JXD9823041200029","LAY_TABLE_INDEX":6},
{"pickCode":"JXD9823041200014","LAY_TABLE_INDEX":0},
{"pickCode":"JXD9823041200015","LAY_TABLE_INDEX":1},
{"pickCode":"JXD9823041200016","LAY_TABLE_INDEX":2},
{"pickCode":"JXD9823041200017","LAY_TABLE_INDEX":3},
{"pickCode":"JXD9823041200018","LAY_TABLE_INDEX":4},
{"pickCode":"JXD9823041200019","LAY_TABLE_INDEX":5},
{"pickCode":"JXD9823041200020","LAY_TABLE_INDEX":6},
{"pickCode":"JXD9823041200021","LAY_TABLE_INDEX":7},
{"pickCode":"JXD9823041200022","LAY_TABLE_INDEX":8}];

const sortKey =  [
{"jxdCode":"JXD9823041200014","serialNum":1},
{"jxdCode":"JXD9823041200015","serialNum":2},
{"jxdCode":"JXD9823041200016","serialNum":3},
{"jxdCode":"JXD9823041200017","serialNum":4},
{"jxdCode":"JXD9823041200018","serialNum":5},
{"jxdCode":"JXD9823041200019","serialNum":6},
{"jxdCode":"JXD9823041200020","serialNum":7},
{"jxdCode":"JXD9823041200021","serialNum":8},
{"jxdCode":"JXD9823041200022","serialNum":9},
{"jxdCode":"JXD9823041200023","serialNum":10},
{"jxdCode":"JXD9823041200024","serialNum":11},
{"jxdCode":"JXD9823041200025","serialNum":12},
{"jxdCode":"JXD9823041200026","serialNum":13},
{"jxdCode":"JXD9823041200027","serialNum":14},
{"jxdCode":"JXD9823041200028","serialNum":15},
{"jxdCode":"JXD9823041200029","serialNum":16}];
const result = origin.sort(function(a, b){
  return sortKey.map(s => s.jxdCode).indexOf(a.pickCode) < sortKey.map(s => s.jxdCode).indexOf(b.pickCode) ? -1 : 1;
});console.log(result)

结果

[
{"pickCode":"JXD9823041200014","LAY_TABLE_INDEX":0},
{"pickCode":"JXD9823041200015","LAY_TABLE_INDEX":1},
{"pickCode":"JXD9823041200016","LAY_TABLE_INDEX":2},
{"pickCode":"JXD9823041200017","LAY_TABLE_INDEX":3},
{"pickCode":"JXD9823041200018","LAY_TABLE_INDEX":4},
{"pickCode":"JXD9823041200019","LAY_TABLE_INDEX":5},
{"pickCode":"JXD9823041200020","LAY_TABLE_INDEX":6},
{"pickCode":"JXD9823041200021","LAY_TABLE_INDEX":7},
{"pickCode":"JXD9823041200022","LAY_TABLE_INDEX":8}]
{"pickCode":"JXD9823041200023","LAY_TABLE_INDEX":0},
{"pickCode":"JXD9823041200024","LAY_TABLE_INDEX":1},
{"pickCode":"JXD9823041200025","LAY_TABLE_INDEX":2},
{"pickCode":"JXD9823041200026","LAY_TABLE_INDEX":3},
{"pickCode":"JXD9823041200027","LAY_TABLE_INDEX":4},
{"pickCode":"JXD9823041200028","LAY_TABLE_INDEX":5},
{"pickCode":"JXD9823041200029","LAY_TABLE_INDEX":6}, ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值