【问题标题】:How to group the array of object like this ? And remove duplicate?如何像这样对对象数组进行分组?并删除重复项?
【发布时间】:2018-10-07 19:14:18
【问题描述】:

我正在编写一个包含数组的 JS 代码的小 sn-p:

[
 { title: 'title1', id: 1 },
 { title: 'title1', id: 2 },
 { title: 'title2', id: 3},
 { title: 'title2', id: 4}
]

我需要这样的东西:

"queried": {
    "title1": [1, 2],
    "title2": [3, 4],
 }

我正在尝试使用带有 _.groupBy(array, "title") 的 Lodash 执行此操作,但我得到:

{ 
 title1:[
  { title: 'title1', id: 1 },
  { title: 'title1', id: 2 }
],
 title2:[
  { title: 'title2', id: 3 },
  { title: 'title2', id: 4 }
],
}

请问如何解决?

【问题讨论】:

  • 什么是id1 ... id4?在您的第一个和最后一个代码段中,这些是变量,在中间,它们似乎是字符串。
  • @connexp 我编辑帖子,它的整数。

标签: javascript arrays grouping lodash


【解决方案1】:

使用_.mapValues() 迭代组,使用_.map() 提取id 的值:

const lol = [{"title":"title1","id":1},{"title":"title1","id":2},{"title":"title2","id":3},{"title":"title2","id":4}];
  
const result = _.mapValues(
  _.groupBy(lol, 'title'),
  v => _.map(v, 'id')
);

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

【讨论】:

    【解决方案2】:

    这也可以通过 ES6 和 reduce 在没有 lodash 的情况下完成,如下所示:

    var arr = [{ title: 'title1', id: 1 }, { title: 'title1', id: 2 }, { title: 'title2', id: 3 }, { title: 'title2', id: 4 } ]
    
    const r = arr.reduce((r, {title, id}) => 
       (r[title] = [...r[title] || [], id], r), {})
    
    console.log(r)

    【讨论】:

    • 很好的答案和开箱即用的思考——它也不需要像 Lodash 这样的第三方库。 +1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 2021-11-20
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    相关资源
    最近更新 更多