【问题标题】:Merge duplicate value in JSON array (underscore or lodash preferable)合并 JSON 数组中的重复值(下划线或 lodash 更可取)
【发布时间】:2017-07-06 22:50:31
【问题描述】:

我想合并 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"
    }
]

在这里,我想根据键“类型”合并 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"
           } 
        ]
     }
]

【问题讨论】:

    标签: javascript arrays json underscore.js lodash


    【解决方案1】:

    您可以使用lodash#groupBy 将集合按type 分组,使用lodash#map 将每个组对象格式转换为组数组格式。要从text 的数组中删除type 属性,我们将使用lodash#omit 的部分应用函数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>

    【讨论】:

    • 这是因为您在数组第三项之后的输入为空。我将从输入中删除它。您会注意到data 输入中的第三项之后有两个逗号“,”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多