如何在javascript中按属性查找数组中的对象?

Posted

技术标签:

【中文标题】如何在javascript中按属性查找数组中的对象?【英文标题】:How to find object in array by property in javascript? 【发布时间】:2021-05-17 22:19:01 【问题描述】:

存在一个包含很多对象的数组。需要按属性在此数组中查找一个或多个对象。

输入对象:

  var Obj = [
    "start": 0, "length": 3, "style": "text",
    "start": 4, "length": 2, "style": "operator",
    "start": 4, "length": 3, "style": "error"
  ];

输出结果:(搜索值为 4 的“开始”)

  var result = [
    "start": 4, "length": 2, "style": "operator",
    "start": 4, "length": 3, "style": "error"
  ];

【问题讨论】:

不到一分钟就能解决您自己的问题!太棒了。 (别喝了,你看双...) @wared 怎么了?这只是问答式的小技巧。 问题是这是一个常见且相当微不足道的问题。您确认没有重复吗? @BlueSkies 我发现了 dups,但***解决方案很糟糕。 【参考方案1】:

使用数组的filter函数

var Obj = [
  "start": 0, "length": 3, "style": "text",
  "start": 4, "length": 2, "style": "operator",
  "start": 4, "length": 3, "style": "error"
];

var result = Obj.filter(x => x.start === 4);
console.log(result);

【讨论】:

【参考方案2】:

_findItemByValue(Obj, "start", 4);

var _findItemByValue = function(obj, prop, value) 
  return obj.filter(function(item) 
    return (item[prop] === value);
  );

兼容除IE6、IE7、IE8之外的所有,但存在polyfill。

if (!Array.prototype.filter) 
  Array.prototype.filter = function (fn, context) 
    var i,
        value,
        result = [],
        length;

        if (!this || typeof fn !== 'function' || (fn instanceof RegExp)) 
          throw new TypeError();
        

        length = this.length;

        for (i = 0; i < length; i++) 
          if (this.hasOwnProperty(i)) 
            value = this[i];
            if (fn.call(context, value, i, this)) 
              result.push(value);
            
          
        
    return result;
  ;

【讨论】:

以上是关于如何在javascript中按属性查找数组中的对象?的主要内容,如果未能解决你的问题,请参考以下文章

在 JavaScript 对象数组中按 id 查找对象

如何使用javascript在嵌套对象数组中按属性分配值

javascript在嵌套对象/数组中按值查找

在javascript中按子数组属性值对对象数组进行排序

猫鼬查询:在数组中按 id 查找对象

NodeJS / Javascript在不同数组中查找具有相同属性的对象