用下划线合并对象数组 [英] Merge array of objects with underscore

查看:83
本文介绍了用下划线合并对象数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这样的对象数组.并且它们具有重复的属性"contactName"值

I have array of objects like this. And they have duplicated property 'contactName' values

[
    {
        categoryId:1
        categoryName:"Default"
        contactId:141
        contactName:"Anonymous"
        name:"Mobile"
        value:"+4417087654"
    },
    {
        categoryId:1
        categoryName:"Default"
        contactId:325
        contactName:"Anonymous"
        name:"Email"
        value:"test2@gmail.com"
    },
    {
        categoryId:1
        categoryName:"Default"
        contactId:333
        contactName:"Anonymous"
        name:"Email"
        value:"ivdtest@test.com"
    }
]

我想通过属性"contactName"的名称将它们合并到一个对象中 像这样

I want to merge them in one object by the name of property 'contactName' To something like this

[
    {
        categoryId: 1,
        categoryName: "Default",
        contactId: 141,
        contactName: "Anonymous",
        names: {
            1: "Mobile",
            2: "Email",
            3: "Email"
        },
        values: {
            1: '+2234324',
            2: "ivdtest@test.com",
            3: "test2@gmail.com"
        }
    }
];

编辑:如何按categoryName分组对象?

推荐答案

var grouped = _.groupBy(input, 'contactName');
var output = _.map(grouped, function(entries) {
  return _.extend(
    _.pick(entries[0], 'categoryId', 'categoryName', 'contactId', 'contactName'), 
    {
      names: _.indexBy(_.pluck(entries, 'name'), function(val, index) { return index +1; }), 
      values: _.indexBy(_.pluck(entries, 'value'), function(val, index) { return index +1; })
    }
  );
});

https://jsfiddle.net/f1x4tscu/3/

这篇关于用下划线合并对象数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆