繁体   English   中英

使用 lodash 的紧凑对象数组

[英]Compact array of objects using lodash

我有一个对象数组,比如第一个 json。

基于属性名称,我想将 zip 这个数组放在另一个数组中,就像那样。 如果名称与另一个 object 相同,则编译 object 并将其他属性和值设置为字段数组。

[ 
   { 
      "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"
         }
      ]
   }
]

这不是很漂亮,当你有一个非常大的数据集时它不会表现得很好,但它是功能性的并且产生你期望的 output。

 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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM