为了账号安全,请及时绑定邮箱和手机立即绑定

使用 lodash 的紧凑对象数组

使用 lodash 的紧凑对象数组

慕丝7291255 2021-11-12 14:13:52
我有一个对象数组,比如第一个 json。基于属性名称,我想将这个数组压缩到另一个中,就像那样。如果名称与另一个对象相同,则编译该对象并将其他属性和值设置为字段数组。[    {       "name":"D1D1",      "attritube":"HOST_NAME",      "value_inv":"TEST1",      "value_prod":"TESTA1"   },   {       "name":"D1D1",      "attritube":"HOST_NAME",      "value_inv":"TEST2",      "value_prod":"TESTB1"   },   {       "name":"D2D2",      "attritube":"COMMENTS",      "value_inv":"TEST1",      "value_prod":"TESTA1"   }][    {       "name":"D1D1",      "fields":[          {             "attritube":"HOST_NAME",            "value_inv":"TEST1",            "value_prod":"TESTA1"         },         {             "attritube":"HOST_NAME",            "value_inv":"TEST2",            "value_prod":"TESTB1"         }      ]   },   {       "name":"D2D2",      "fields":[          {             "attritube":"COMMENTS",            "value_inv":"TEST1",            "value_prod":"TESTA1"         }      ]   }]
查看完整描述

1 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

这并不漂亮,当您拥有非常大的数据集时,它的性能也不会很好,但它可以正常工作并产生您期望的输出。


const arr = [ 

   { 

      "name":"D1D1",

      "attritube":"HOST_NAME",

      "value_inv":"TEST1",

      "value_prod":"TESTA1"

   },

   { 

      "name":"D1D1",

      "attritube":"HOST_NAME",

      "value_inv":"TEST2",

      "value_prod":"TESTB1"

   },

   { 

      "name":"D2D2",

      "attritube":"COMMENTS",

      "value_inv":"TEST1",

      "value_prod":"TESTA1"

   }

];


const newArr = _.chain(arr)

  .groupBy('name')

  .toPairs()

  .map((val) => ({

    name: val[0],

    fields: _.map(val[1], (v) => _.omit(v, ['name']))

  }))

  .value();

  

console.log(newArr);

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>


查看完整回答
反对 回复 2021-11-12
  • 1 回答
  • 0 关注
  • 109 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信