按另一个数组对对象数组进行排序
Sort array of objects by another array
我有一组看起来像这样的对象。
var items = [
{id: 1150, title: 'im tyler'},
{id: 1195, title: 'im josh'}
];
另一个数组如下所示:
var sortArray = [
'1195',
'1150'
];
我想要完成的是基于排序数组结果的排序。因此,在这种情况下,items 数组应该将 id = 1195 的对象排序为列表中的第一个。此外,如果 sortArray 中只有一个 id,它应该只在 items 数组中显示该对象。
想要的结果:
var Newitems = [
{id: 1195, title: 'im josh'}
{id: 1150, title: 'im tyler'},
];
您可以遍历排序数组,并在每次迭代中查找源数组中的元素。如果找到,将结果推送到新数组。
虽然它生成了一个新数组,但请注意,项目仍然引用原始数组。新数组只包含对原始项目的引用。
var sortArray = [
'1195',
'1150'
];
var items = [
{id: 1150, title: 'im tyler'},
{id: 1195, title: 'im josh'}
];
var res = [];
sortArray.forEach(item => {
res.push(items.find(i => i.id.toString() === item));
});
console.log(res);
您可以使用 array.sort 和 array.indexOf
var items = [
{id: '1150', title: 'im tyler'},
{id: '1195', title: 'im josh'}
];
var sortArray = [
'1195',
'1150'
];
items.sort((a, b) => sortArray.indexOf(a.id) - sortArray.indexOf(b.id));
console.log(items);
您可以使用地图和过滤器来做到这一点,如下所示:
var ordered = sortArray.map(id => {
return items.filter(item => {
return id == item.id
});
});
您可以从排序数组创建一个对象,然后使用该对象进行排序。
var items = [{id: 1150, title: 'im tyler'},{id: 1195, title: 'im josh'}];
var sortArray = ['1195','1150'].reduce((r, e, i) => Object.assign(r, {[e]: i}), {})
items.sort((a, b) => sortArray[a.id] - sortArray[b.id]);
console.log(items)
看起来,你需要过滤对象数组,然后按sortArray
的顺序对对象进行排序(顺便说一句,如果数据具有相同的类型会更容易)。
var items = [{ id: 1150, title: 'im tyler' }, { id: 1195, title: 'im josh' }],
sortArray = ['1195', '1150'].map(Number),
result = items
.filter(({ id }) => sortArray.includes(id))
.sort((a, b) => sortArray.indexOf(a.id) - sortArray.indexOf(b.id));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
我有一组看起来像这样的对象。
var items = [
{id: 1150, title: 'im tyler'},
{id: 1195, title: 'im josh'}
];
另一个数组如下所示:
var sortArray = [
'1195',
'1150'
];
我想要完成的是基于排序数组结果的排序。因此,在这种情况下,items 数组应该将 id = 1195 的对象排序为列表中的第一个。此外,如果 sortArray 中只有一个 id,它应该只在 items 数组中显示该对象。
想要的结果:
var Newitems = [
{id: 1195, title: 'im josh'}
{id: 1150, title: 'im tyler'},
];
您可以遍历排序数组,并在每次迭代中查找源数组中的元素。如果找到,将结果推送到新数组。
虽然它生成了一个新数组,但请注意,项目仍然引用原始数组。新数组只包含对原始项目的引用。
var sortArray = [
'1195',
'1150'
];
var items = [
{id: 1150, title: 'im tyler'},
{id: 1195, title: 'im josh'}
];
var res = [];
sortArray.forEach(item => {
res.push(items.find(i => i.id.toString() === item));
});
console.log(res);
您可以使用 array.sort 和 array.indexOf
var items = [
{id: '1150', title: 'im tyler'},
{id: '1195', title: 'im josh'}
];
var sortArray = [
'1195',
'1150'
];
items.sort((a, b) => sortArray.indexOf(a.id) - sortArray.indexOf(b.id));
console.log(items);
您可以使用地图和过滤器来做到这一点,如下所示:
var ordered = sortArray.map(id => {
return items.filter(item => {
return id == item.id
});
});
您可以从排序数组创建一个对象,然后使用该对象进行排序。
var items = [{id: 1150, title: 'im tyler'},{id: 1195, title: 'im josh'}];
var sortArray = ['1195','1150'].reduce((r, e, i) => Object.assign(r, {[e]: i}), {})
items.sort((a, b) => sortArray[a.id] - sortArray[b.id]);
console.log(items)
看起来,你需要过滤对象数组,然后按sortArray
的顺序对对象进行排序(顺便说一句,如果数据具有相同的类型会更容易)。
var items = [{ id: 1150, title: 'im tyler' }, { id: 1195, title: 'im josh' }],
sortArray = ['1195', '1150'].map(Number),
result = items
.filter(({ id }) => sortArray.includes(id))
.sort((a, b) => sortArray.indexOf(a.id) - sortArray.indexOf(b.id));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }