从数组中的对象中查找键的值 - Javascript

时间:2012-03-14 13:33:28

标签: javascript arrays object loops

我已经尝试了许多方法来使其正常工作,但我无法

这是我的问题:

我在javascript中有一个对象数组,看起来像这样:

var myArrOfObjs = [];
var myObject1 = {};
myObject1.key = '1234';
myObject1.label = 'Richard Clifford';

myArrOfObjs.push( myObject1 );

我需要做类似的事情:

if( !containsObject( myObject1, myArrOfOjbs ) ){
    // Do stuff
}

我需要containsObject函数来检查找到的对象中的键值(如果有的话),所以如果containsObject( myObject1, myArrOfOjbs )找到对象,我需要检查它的关键是否是与我目前试图推动的那个相同。

我需要它来检查密钥的原因是因为我已经尝试过这个函数,我在StackOverflow上找到了其他的地方,但它并不是很有效。

function containsObject(obj, list) {
    var i;
    for (i = 0; i < list.length; i++) {
        if (list[i] == obj) {
            return true;
        }
    }

    return false;
}

即使已经包含对象,它仍然会将对象推送到数组。

如果您需要清理任何内容,请告诉我,我发现这不是最容易阅读/理解的帖子。

谢谢!

3 个答案:

答案 0 :(得分:3)

您需要更改相等性测试以比较键:

function containsObject(obj, list) {
    var i;
    for (i = 0; i < list.length; i++) {
        if (list[i].key === obj.key) {
            return true;
        }
    }

    return false;
}

答案 1 :(得分:1)

我已将此函数添加到Array-Object的原型链中,因此您只需调用list.hasObject(obj)

Array.prototype.hasObject = (
  !Array.indexOf ? function (o)
  {
    var l = this.length + 1;
    while (l -= 1)
    {
        if (this[l - 1] === o)
        {
            return true;
        }
    }
    return false;
  } : function (o)
  {
    return (this.indexOf(o) !== -1);
  }
);

小小提琴:http://jsfiddle.net/NE9kx/

答案 2 :(得分:1)

也许这不是你正在寻找的答案,但我想知道为什么不使用Object而不是数组,如果你有一把钥匙:

var objectList = {};

var myObject { key : '1234', label : 'Richard Clifford' };

objectList[myObject.key] = myObject;

所以如果你想迭代:

for (var key in objectList) {
    if (objectList.hasOwnProperty(key)
        alert(key);
}

如果您想使用给定的密钥来访问该对象,您只需:

alert(objectList['1234'].label);