【问题标题】:JavaScript or Lodash find objects by keyJavaScript 或 Lodash 按键查找对象
【发布时间】:2018-02-09 04:39:28
【问题描述】:

在具有差异键的对象数组中,如何使用 ES6 或 Lodash 按键查找对象?

const arr = [{a:2}, {b:3}, {fred:10}]

我希望结果是:

=> [{a:2}, {fred:10}]

我不想使用省略样式的方法。

【问题讨论】:

  • 如何从arr 到结果?
  • 这就是问题
  • 不,这不是问题。您想按键查找对象,这就是问题所在。你的结果只是凭空而来。标准是什么?你是怎么得到这个结果的?
  • 为什么你的结果arr没有中间元素?这个魔术的逻辑是什么?

标签: javascript ecmascript-6 lodash


【解决方案1】:
const filtered = arr.filter(obj => obj.hasOwnProperty("a") || obj.hasOwnProperty("fred"));

// or, if you have dynamic / lots of keys:
const keys = ["a", "fred"];
const filtered = arr.filter(obj => keys.some(key => obj.hasOwnProperty(key));

【讨论】:

    【解决方案2】:

    filter 方法会很有用。创建一个函数并传递一个keys 数组。内部过滤器函数检查键是否与参数数组匹配。如果通过则返回该对象

    var orgObject = [{
      a: 2
    }, {
      b: 3
    }, {
      fred: 10
    }];
    
    function searchByKey(keyNames) {
    
      return orgObject.filter(function(item) {
        for (var keys in item) {
          if (keyNames.indexOf(keys) !== -1) {
            return item
          }
        }
      })
    }
    
    
    console.log(searchByKey(['a', 'fred']))

    【讨论】:

      【解决方案3】:

      基本上,您需要数组中具有afred 字段的所有对象。过滤时可以在对象上使用hasOwnProperty()

      _.filter(array, elem => elem.hasOwnProperty('a') || elem.hasOwnProperty('fred'));
      

      【讨论】:

        猜你喜欢
        • 2019-03-02
        • 2018-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-27
        • 2016-05-24
        • 2019-03-21
        • 2021-10-04
        相关资源
        最近更新 更多