簡體   English   中英

基於另一個對象數組的屬性對對象數組進行排序

[英]sort an object array based on property of another object array

我在js.dummy數組中有兩個對象數組如下所示。

arr1=[{'id':1,'name':'David'},
      {'id':2,'name':'Miles'},
      {'id':3,'name':'John'},];

arr2=[{'id':2,'age':22},
      {'id':3,'age':18},
      {'id':1,'age':12},];

我可以按照與arr2相同的ID順序對arr1進行排序。 所以arr1變成了

[{'id':2,'name':'Miles'},
      {'id':3,'name':'John'},
      {'id':1,'name':'David'},];

實際的數組每個都有900個對象。那么有沒有有效的方法來實現這一點?

將第二個數組reduce為由id s索引的Map ,然后使用Map.get在排序時標識id的位置。 Map s保證了O(1)查找時間:

 const arr1 = [{'id':1,'name':'David'},{'id':2,'name':'Miles'},{'id':3,'name':'John'},]; const arr2 = [{'id':2,'age':22},{'id':3,'age':18},{'id':1,'age':12},]; const ids = arr2.reduce((map, { id }, i) => map.set(id, i), new Map()); arr1.sort((a, b) => ids.get(a.id) - ids.get(b.id)); console.log(arr1); 

盡管如此,在現代,900件物品並不多。

// cache arr1 id to index, id is key, index is value
let arr1IdToIndex = arr1.reduce((sum, cur, index) => (sum[cur.id] = index, sum), {})
let result = arr2.map(cur => arr1[arr1IdToIndex[cur.id]])
arr1 = result

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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