【问题标题】:Get an object from an array on predicate in Javascript [duplicate]从Javascript中谓词的数组中获取对象[重复]
【发布时间】:2015-03-31 14:01:24
【问题描述】:

我有以下对象数组:

var objs = [{id: 1, name: 'foo', ...},
            {id: 2, name: 'bar', ...},
            {id: 3, name: 'baz', ...}];

还有这个变量:

var matcher = 'bar';

获取matcher 等于其name对象 的最简单方法是什么?

使用这个matcher,结果应该是:

{id: 2, name: 'bar', ...}

【问题讨论】:

  • @Vohuman 您的重复参考是 12 年的旧参考。技术在不断发展,并提供了新的解决方案。请在弄脏我的帖子之前,花点时间采取行动。
  • 其中一个答案建议$.grep,另一个建议Array.prototype.filter。开发人员仍在使用它们。您只想过滤数组中的对象,一个简单的、非常古老的for 循环也可以做到这一点。无需为此使用 2015 年的技术。标记为重复的目的不是“解决”问题。

标签: javascript arrays object match


【解决方案1】:

最简单的方法是使用filter函数

var objs = [{id: 1, name: 'foo'},
            {id: 2, name: 'bar'},
            {id: 3, name: 'baz'}];

var matcher = 'bar';

var result = objs.filter(function(obj) {
    return obj.name === matcher;
});

console.log(result); // [{id: 2, name: 'bar'}]
console.log(result[0]); // {id: 2, name: 'bar'}

【讨论】:

    【解决方案2】:

    最简单的方法可能是使用允许对对象执行一些更高级别函数的库,例如filter

    这样的库例如 underscore 和 lodash,都保留了 _ 符号以供使用,您可以使用它们编写:

    _(objs).filter(function(element){return element.name === matcher})[0];
    

    (filter 函数返回给定过滤函数返回 true 的数组或对象的元素 - 在这种情况下,您正在检查名称是否等于匹配器。返回值是这些元素的数组,因此[0] 部分)

    编辑:我没有注意到你有一个数组开始,然后你甚至不需要一个外部库,数组默认情况下有过滤器方法。

    【讨论】:

      猜你喜欢
      • 2018-08-15
      • 2019-05-11
      • 2020-11-24
      • 2021-09-14
      • 1970-01-01
      • 2020-10-02
      • 1970-01-01
      • 2012-12-07
      相关资源
      最近更新 更多