簡體   English   中英

JS / Lodash-多次出現的組值?

[英]JS/Lodash - Group values which occur more than once?

我有一個類似的數組:

const arr = [
  { id: 123, parent: [345] },
  { id: 811, parent: [456] },
  { id: 987, parent: [876] },
  { id: 811, parent: [137] },
  { id: 811, parent: [825] }
]

ID為811的對象出現3次。

我需要將其轉換為:

const newArr = [
  { id: 123, parent: [345] },
  { id: 811, parent: [456, 137, 825] },
  { id: 987, parent: [876] }
]

也就是說,我需要找到一個ID出現多次的對象,然后將這些對象合並到一個對象中,該對象具有所有對象的父值的父數組。

使用lodash方法執行此操作的最佳方法是什么?

使用lodash,通過id分組,合並每個組,並合並數組:

 const arr = [{"id":123,"parent":[345]},{"id":811,"parent":[456]},{"id":987,"parent":[876]},{"id":811,"parent":[137]},{"id":811,"parent":[825]}]; const result = _(arr) .groupBy('id') .map((group) => _.mergeWith({}, ...group, (o1, o2) => Array.isArray(o1) ? o1.concat(o2) : undefined )) .value(); console.log(result); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script> 

或使用ES6,對Array#reduceMap

 const arr = [{"id":123,"parent":[345]},{"id":811,"parent":[456]},{"id":987,"parent":[876]},{"id":811,"parent":[137]},{"id":811,"parent":[825]}]; const result = [...arr.reduce((map, obj) => { const group = map.get(obj.id) || { id: obj.id, parent: [] }; group.parent.push(...obj.parent); return map.set(obj.id, group); }, new Map()).values()]; console.log(result); 

您可以在普通js中使用reduce()方法來執行此操作,只需跟蹤對象ID即可,並且可以為此使用另一個對象。

 const arr = [ { id: 123, parent: [345] }, { id: 811, parent: [456] }, { id: 987, parent: [876] }, { id: 811, parent: [137] }, { id: 811, parent: [825] } ] var o = {} var result = arr.reduce(function(r, e) { if(!o[e.id]) o[e.id] = e, r.push(o[e.id]) else o[e.id].parent.push(...e.parent) return r; }, []) console.log(result) 

暫無
暫無

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

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