【问题标题】:Finding nested object in a collection with Lodash使用 Lodash 在集合中查找嵌套对象
【发布时间】:2019-12-31 08:34:10
【问题描述】:
var collection = {
  'key1': [
    { 'uuid': '123', 'a': 'a' },
    { 'uuid': '456', 'b': 'b',
      'randomKeyValue': [
        { 'uuid': '349', 'd': 'd' }
      ]
    }
  ],
  'key2': [
    { 'uuid': '890', 'c': 'c' }
  ]
}

使用_.find(collection, { 'uuid': '349' }) 将返回未定义。

如何找到具有uuid == 349 的哈希?

查找的预期返回是:{ 'uuid': '349', 'd': 'd' }

必须使用 ES5 标准编写,并且必须使用 Lodash。

【问题讨论】:

标签: javascript arrays hash lodash es5-compatiblity


【解决方案1】:

使用纯 js 相当简单

var collection = {
    'key1': [
        { 'uuid': '123', 'a': 'a' },
        { 'uuid': '456', 'b': 'b' }
    ],
    'key2': [
        { 'uuid': '890', 'c': 'c' },
        { 'uuid': '349', 'd': 'd' }
    ]
}

const res = Object.values(collection).flat().find(({uuid}) => uuid === '349');
console.log(res);

【讨论】:

  • (脆培根?),如果有多层嵌套,你如何更动态地编写这个?
  • 脆培根。这是正确的! :D 你能分享一些演示数据吗?
【解决方案2】:
_.filter(_.flatMap(collection), function(o) { return o.uuid == '349' });

【讨论】:

  • 如果有多个条目具有相同的uuid,_.filter 将返回所有匹配项,_.find 将仅返回找到的第一个。
  • 如果我只需要第一个:_.find(_.flatMap(collection), { uuid: '349' });
猜你喜欢
  • 2020-01-22
  • 2014-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多