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

查找密钥';数组中对象的s值-Javascript,javascript,arrays,object,loops,Javascript,Arrays,Object,Loops,我已经尝试了很多方法让它正常工作,但我不能 我的问题是: 我有一个javascript中的对象数组,看起来像这样: var myArrOfObjs = []; var myObject1 = {}; myObject1.key = '1234'; myObject1.label = 'Richard Clifford'; myArrOfObjs.push( myObject1 ); 我需要做一些事情,比如: if( !containsObject( myObject1, myArrOfOjb

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

我的问题是:

我有一个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;
}
函数containsObject(对象,列表){
var i;
对于(i=0;i
即使对象已经包含该对象,它仍然会将该对象推送到数组中

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


谢谢

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

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

    return false;
}
函数containsObject(对象,列表){
var i;
对于(i=0;i
您需要更改相等性测试以比较键:

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

    return false;
}
函数containsObject(对象,列表){
var i;
对于(i=0;i
我得到了这个函数,它被添加到数组对象的原型链中,因此您可以调用
list.hasObject(obj)


这方面的小麻烦:

我得到了这个函数,它被添加到数组对象的原型链中,因此您可以调用
list.hasObject(obj)


小提琴:

也许这不是你想要的答案,但我想知道,如果你有一个键,为什么不使用对象而不是数组:

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

也许这不是您要寻找的答案,但我想知道,如果您有一个键,为什么不使用对象而不是数组:

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

这个containsObject方法应该有效。调用代码可能有问题。你能展示它吗(如果可能的话,制作一个自动的简化代码来显示问题)?这个containsObject方法应该可以工作。调用代码可能有问题。你能展示一下吗(如果可能的话,制作一个自动简化的代码来显示问题)?效果很好。显示了我对javascript的了解有多少。我才刚刚开始学。所以非常感谢!非常感谢!这非常有效。显示了我对javascript的了解有多少。我才刚刚开始学。所以非常感谢!非常感谢!回答得好,但我同意上面的说法。无论如何谢谢你!回答得好,但我同意上面的说法。无论如何谢谢你!原因是因为我正在为第三方软件编写扩展,它使用一个对象数组。谢谢你给我的建议,我将使用对象:)原因是因为我正在为第三方软件编写扩展,它使用对象数组。感谢您的建议,以供将来参考。我将使用对象:)