【问题标题】:Determine if the object has a property and value in javascript在javascript中判断对象是否有属性和值
【发布时间】:2013-10-18 13:37:05
【问题描述】:

我想检查一个对象是否具有某物的属性并且它的值是否等于某个值。

var test = [{name : "joey", age: 15}, {name: "hell", age: 12}]

你去,一个对象数组,现在我想在对象内部搜索,如果对象包含我想要的,则返回 true。

我试着这样做:

Object.prototype.inObject = function(key, value) {
if (this.hasOwnProperty(key) && this[key] === value) {
  return true
};
return false;
};

这有效,但不适用于数组。我该怎么做?

【问题讨论】:

  • this[i][key] 在你的情况下当然是 i = 0 和 1 的数组语法
  • 您尝试过对array.length 进行循环吗?然后可以使用this[i][key]等

标签: javascript jquery web


【解决方案1】:

使用some Array method 为数组的每个值测试您的函数:

function hasValue(obj, key, value) {
    return obj.hasOwnProperty(key) && obj[key] === value;
}
var test = [{name : "joey", age: 15}, {name: "hell", age: 12}]
console.log(test.some(function(boy) { return hasValue(boy, "age", 12); }));
// => true - there is a twelve-year-old boy in the array

顺便说一句,don't extend Object.prototype

【讨论】:

  • @Ecropolis:但很简单,请参阅链接文档的“polyfill”部分
  • @poepje 哦,对了。永远不能确定书面交流,尤其是周围有这么多新手,他们可能会提出这个严肃的问题。现在指出,幽默是显而易见的......
【解决方案2】:

-- 对于属性--

if(prop in Obj)  
//or
Obj.hasOwnProperty(prop)

--对于值---

使用 "Object.prototype.hasValue = ..." 对 js 来说是致命的,但 Object.defineProperty 允许您使用 enumerable:false 定义属性(默认)

Object.defineProperty(Object.prototype,"hasValue",{
   value : function (obj){
              var $=this;
              for( prop in $ ){
                  if( $[prop] === obj ) return prop;
              }
              return false;
           }
});

仅用于实验测试 NodeList 是否有元素

var NL=document.QuerySelectorAll("[atr_name]"),
    EL= document.getElementById("an_id");
console.log( NL.hasValue(EL) )  

// if false then #an_id has not atr_name

【讨论】:

  • 这是我为检查对象的值找到的最有用的答案,也是唯一明确提到许多人会遇到的致命 javascript 错误的答案。
【解决方案3】:

对于数组,当然你必须用for浏览那个数组

for(var i = 0 ; i < yourArray.length; i++){
    if(yourArray[i].hasOwnProperty("name") && yourArray[i].name === "yourValue") {
     //process if true
    }
} 

【讨论】:

    【解决方案4】:

    通常你会使用类似Object.first:

    // search for key "foo" with value "bar"
    var found = !!Object.first(test, function (obj) {
        return obj.hasOwnProperty("foo") && obj.foo === "bar";
    });
    

    假设Object.first 在找不到匹配项时会返回一些虚假值。

    Object.first 不是原生函数,但请查看流行的框架,它们一定有一个。

    【讨论】:

    • 从未听说过Object.first。你的意思是Array.first
    • 我想我的意思是Object.find
    【解决方案5】:

    这是另一种检查对象是否具有属性但未设置属性值的解决方案。属性值可能为 0、null 或空字符串。

    array.forEach(function(e){
     if(e.hasOwnProperty(property) && Boolean(e[property])){
      //do something
     }
     else{
      //do something else
     }
    });
    

    Boolean() 是这里的诀窍。

    【讨论】:

      猜你喜欢
      • 2010-12-26
      • 1970-01-01
      • 1970-01-01
      • 2012-06-09
      • 2021-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-06
      相关资源
      最近更新 更多