繁体   English   中英

键对象数组通过object键嵌套在另一个object里面的另一个数组?

[英]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.

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