查找密钥's数组中对象的值-Javascript

Finding a Key's Value from an object within an array - Javascript

本文关键字:对象 -Javascript 数组 密钥 查找      更新时间:2023-09-26

我已经尝试了很多方法来让它正常工作,但我不能

这是我的问题:

我有一个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;
}

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

如果你需要澄清什么,请告诉我,我意识到这不是最容易阅读/理解的帖子。

谢谢!

您需要更改相等测试来比较密钥:

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

我已经得到了这个函数,它被添加到Array对象的原型链中,所以您可以直接调用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/

也许这不是你想要的答案,但我想知道如果你有一个密钥,为什么不使用Object而不是Array:

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);