如何通过另一个对象数组对对象数组进行排序。
这是我的代码:
let arrayItem = [
{
'id': '#id1',
'name': 'one',
'bundle': 'bundle1'
},
{
'id': '#id2',
'name': 'two',
'bundle': 'bundle2'
},
{
'id': '#id3',
'name': 'three',
'bundle': 'bundle3'
}
]
这是要订购的数组:
let orderItem = [
{
'id': '#id3',
'name': 'three'
},
{
'id': '#id1',
'name': 'one',
},
{
'id': '#id2',
'name': 'two'
}
]
我需要以下数据:
let resultItem = [
{
'id': '#id3',
'name': 'three',
'bundle': 'bundle3'
},
{
'id': '#id1',
'name': 'one',
'bundle': 'bundle1'
},
{
'id': '#id2',
'name': 'two',
'bundle': 'bundle2'
}
]
我想通过多个键将对象数组与另一个对象数组排序。
谢谢
答案 0 :(得分:2)
由于orderArray
中有对象数组,因此首先需要找到该顺序对象的索引,然后获取index
的差值以对原始数组进行排序:
let arrayItem = [
{
'id': '#id1',
'name': 'one',
'bundle': 'bundle1'
},
{
'id': '#id2',
'name': 'two',
'bundle': 'bundle2'
},
{
'id': '#id3',
'name': 'three',
'bundle': 'bundle3'
}
];
let orderItem = [
{
'id': '#id3',
'name': 'three'
},
{
'id': '#id1',
'name': 'one',
},
{
'id': '#id2',
'name': 'two'
}
];
arrayItem.sort(function(a, b){
var aIndex = orderItem.findIndex(({id, name}) => a.id===id && a.name===name);
var bIndex = orderItem.findIndex(({id, name}) => b.id===id && b.name===name);
return aIndex - bIndex;
});
console.log(arrayItem);
答案 1 :(得分:0)
您可以按照@Ankit Agarwal的建议使用排序。
或者您可以使用下面的简单行使其适合您。这可以解决问题。
var orderedItem = orderItem.map(orderObj =>
arrayItem.find(actualObj => actualObj.id === orderObj.id))
我刚刚在您的 orderItem 上运行
map
,find
arrayItem 上的对应对象,然后返回 您的arrayItem中的对象。
希望有帮助。
答案 2 :(得分:0)
您可以使用Map
来存储索引/顺序,然后使用索引的差量对数组进行排序。
var arrayItem = [{ id: '#id1', name: 'one', bundle: 'bundle1' }, { id: '#id2', name: 'two', bundle: 'bundle2' }, { id: '#id3', name: 'three', bundle: 'bundle3' }],
orderItem = [{ id: '#id3', name: 'three' }, { id: '#id1', name: 'one', }, { id: '#id2', name: 'two' }],
order = new Map(orderItem.map(({ id }, i) => [id, i]));
arrayItem.sort((a, b) => order.get(a.id) - order.get(b.id));
console.log(arrayItem);