检查数组是否包含JavaScript中具有特定属性值的对象?

时间:2012-10-31 14:43:46

标签: javascript arrays object

如果我有类似

的话
[Object(id:03235252, name:"streetAddress"), Object(id:32624666, name:"zipCode")...]

如何从名称设置为“zipCode”的数组删除

5 个答案:

答案 0 :(得分:12)

如果您需要修改现有阵列,则应使用splice()

for (var i = array.length - 1; i > -1; i--) {
    if (array[i].name === "zipCode")
        array.splice(i, 1);
}

请注意,我正在反向循环。这是为了处理这样一个事实:当你执行.splice(i, 1)时,数组将被重新编制索引。

如果我们进行了前向循环,那么每当我们执行i时我们也需要调整.splice(),以避免跳过索引。

答案 1 :(得分:8)

arr = arr.filter(function (item) {
  return (item.name !== 'zipCode');
});

答案 2 :(得分:2)

var i = array.length;
while(i-- > 0) {
    if (array[i].name === "zipCode")
        array.splice(i, 1);
}
  • 向后循环数组(因此拼接时不必跳过索引)
  • 检查每个项目的名称是否为“zipCode”
    • 如果是,请使用yourArray.splice(index,1);
    • 将其拼接

然后:

  • 如果有可能有多个名称具有值“zipCode”
  • ,则继续
  • 打破循环

答案 3 :(得分:1)

这也可以通过阵列上的原型来完成

Array.prototype.containsByProp = function(propName, value){
      for (var i = this.length - 1; i > -1; i--) {
        var propObj = this[i];
          if(propObj[propName] === value) {
            return true;
        }
      }
    return false;
} 

var myArr = [
  {
    name: "lars",
    age: 25
  }, {
    name: "hugo",
    age: 28
  }, {
    name: "bent",
    age: 24
  }, {
    name: "jimmy",
    age: 22
  }
];

console.log(myArr.containsByProp("name", "brent")); // Returns false
console.log(myArr.containsByProp("name", "bent")); // Returns true

也可以找到并测试代码 here

答案 4 :(得分:0)

这可能是详细且简单的解决方案。

//plain array
var arr = ['a', 'b', 'c'];
var check = arr.includes('a');
console.log(check); //returns true
if (check)
{
   // value exists in array
   //write some codes
}

// array with objects
var arr = [
      {x:'a', y:'b'},
      {x:'p', y:'q'}
  ];

// if you want to check if x:'p' exists in arr
var check = arr.filter(function (elm){
    if (elm.x == 'p')
    {
       return elm; // returns length = 1 (object exists in array)
    }
});

// or y:'q' exists in arr
var check = arr.filter(function (elm){
    if (elm.y == 'q')
    {
       return elm; // returns length = 1 (object exists in array)
    }
});

// if you want to check, if the entire object {x:'p', y:'q'} exists in arr
var check = arr.filter(function (elm){
    if (elm.x == 'p' && elm.y == 'q')
    {
       return elm; // returns length = 1 (object exists in array)
    }
});

// in all cases
console.log(check.length); // returns 1

if (check.length > 0)
{
   // returns true
   // object exists in array
   //write some codes
}