合并 JSON 数组中的重复值(最好使用下划线或 lodash)

Merge duplicate value in JSON array (underscore or lodash preferable)

我想合并 JSON 数组的某些对象,这些对象具有特定键的重复值。

我有 json 个这样的数组:

var data=[
    { type:"XO",
      logID:"213323",
      user:"34324234"
    },
    { type:"YO",
      logID:"2323323",
      user:"1212234"
    },
    { type:"XO",
      logID:"676323323",
      user:"45465412234"
    },
    ,
    { type:"ZO",
      logID:"1231434323",
      user:"35739434"
    }
]

这里我想根据键 'type' 合并 JSON 个对象。所以相同类型的新密钥看起来像这样:

var expectedOutput:[
     { 
        type:XO,
        text: [
            {
              logID:"213323",
              user:"34324234"
            },
            {
              logID:"676323323",
              user:"45465412234"
            }
        ]
     },
     { type:"YO",
       text:[
         {
         logID:"2323323",
         user:"1212234"
        }  
      ]
     },
     {
       type:"ZO",
       text:[ 
           {
             logID:"1231434323",
             user:"35739434"
           } 
        ]
     }
]

您可以使用 lodash#groupBy to group the collection by type, use lodash#map to transform each group object format into a group array format. To remove the type property from the array of text, we'll use a partailly applied lodash#omit function using lodash#partial.

var result = _(data)
  .groupBy('type')
  .map(function(group, type) {
    return {
      type: type,
      text: _.map(group, _.partial(_.omit, _, 'type'))
    };
  })
  .value();

var data = [{
    type: "XO",
    logID: "213323",
    user: "34324234"
  },
  {
    type: "YO",
    logID: "2323323",
    user: "1212234"
  },
  {
    type: "XO",
    logID: "676323323",
    user: "45465412234"
  },
  {
    type: "ZO",
    logID: "1231434323",
    user: "35739434"
  }
];

var result = _(data)
  .groupBy('type')
  .map(function(group, type) {
    return {
      type: type,
      text: _.map(group, _.partial(_.omit, _, 'type'))
    };
  })
  .value();
  
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>