我需要重新排列数组中的某些对象。
假设这是我的数据数组:
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?
})
答案 0 :(得分:3)
通过data
将id
转换为Map对象。然后在order
数组上使用Array.map()
,然后从Map中获取相关项目:
const data = [
{ id: 'ETHUVMY0m', name: 'item 1', value: 'value 1' },
{ id: 'McfTB40vO', name: 'item 2', value: 'value 2' }
]
const order = [ 'McfTB40vO', 'ETHUVMY0m' ]
const dataMap = new Map(data.map(o => [o.id, o]))
const result = order.map(id => dataMap.get(id))
console.log(result)
答案 1 :(得分:2)
如果您想一劳永逸,请使用map和find而不是forEach:
const data = [
{ id: 'ETHUVMY0m', name: 'item 1', value: 'value 1' },
{ id: 'McfTB40vO', name: 'item 2', value: 'value 2' }
];
const order = [ 'McfTB40vO', 'ETHUVMY0m' ];
const result = order.map(id => data.find(x => x.id === id));
console.log(result);
答案 2 :(得分:0)
您可以在map
上order
:
const data = [{
id: 'ETHUVMY0m',
name: 'item 1',
value: 'value 1'
},
{
id: 'McfTB40vO',
name: 'item 2',
value: 'value 2'
}
]
const order = ['McfTB40vO', 'ETHUVMY0m']
const output = order.map(d => data.find(({
id
}) => d == id));
console.log(output);