[英]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'},
];
您可以遍歷sort數組,並在每次迭代中找到源數組中的元素。 如果找到,將結果推送到新數組。
盡管它會生成一個新數組,但請注意,這些項目仍引用原始數組。 新數組僅包含對原始項目的引用。
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);
您可以從排序數組創建一個對象,然后使用該對象進行排序。
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; }
您可以使用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 }); });
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.