[英]Key array of objects by object key nested in another object inside another array?
我有这个数据结构,想使用 lodash 使用 keyBy 更改它
[
{
names: [
{
id: 1,
name: 'aa',
},
{
id: 2,
name: 'bb',
},
],
date: '2020-11-02',
},
{
names: [
{
id: 3,
name: 'cc',
},
],
date: '2020-11-10',
},
]
并且想使用 lodash 来更改它,因此它只是一个 object 的对象,其中每个名称都是一个 object,并以 id 作为参考。 真的不在乎日期是否被删除或者不需要它。 它应该看起来像这样。
1: {
id: 1,
name: 'aa',
},
2: {
id: 2,
name: 'bb',
},
3:{
id: 3,
name: 'cc',
}
尝试这样做但它只返回一个空的 object
_.chain(array)
.keyBy('id')
.mapValues(function (item) {
item.name= _.keyBy(item.name, 'id')
return item
})
.value()
这不是使用 lodash,但这很简单:
.flatMap(i => i.names)
.reduce((c, i) => {
c[i.id] = i;
return c;
}, {})
console.log([ { names: [ { id: 1, name: 'aa', }, { id: 2, name: 'bb', }, ], date: '2020-11-02', }, { names: [ { id: 3, name: 'cc', }, ], date: '2020-11-10', }, ].flatMap(i => i.names).reduce((c, i) => { c[i.id] = i; return c; }, {}))
使用 lodash,您可以使用_.flatMap()
将名称转换为单个数组,然后使用_.keyBy()
转换为 object:
const arr = [{"names":[{"id":1,"name":"aa"},{"id":2,"name":"bb"}],"date":"2020-11-02"},{"names":[{"id":3,"name":"cc"}],"date":"2020-11-10"}] const result = _.keyBy( _.flatMap(arr, 'names'), 'id' ) console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js" integrity="sha512-90vH1Z83AJY9DmlWa8WkjkV79yfS2n2Oxhsi2dZbIv0nC4E6m5AbH8Nh156kkM7JePmqD6tcZsfad1ueoaovww==" crossorigin="anonymous"></script>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.