簡體   English   中英

用另一個數組對對象數組進行排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM