如何检查我的密钥是否存在于数组对象中

Joh*_*per 14 javascript

var arr = [{
   key: "key1", value: "z"
}, {
   key: "key2", value: "u"
}, {
   ...
}];
Run Code Online (Sandbox Code Playgroud)

如何检查我的key:"key1"存在是否已存在.如果它不存在,我需要在ma数组中添加密钥.

if(arr.hasOwnProperty("key1")){
      arr.unshift({key:"key1", value:"z"});
}
Run Code Online (Sandbox Code Playgroud)

tva*_*son 20

为了方便起见,您应该如此存储数据:

var map = {
       "key1": "z",
       "key2": "u"
};
Run Code Online (Sandbox Code Playgroud)

然后,您可以进行检查,如果您的密钥与对象上的任何现有属性不冲突,并且您不需要空值,则可以使其更容易.

if (!map["key1"]) {
   map["key1"] = "z";
}
Run Code Online (Sandbox Code Playgroud)

如果你真的需要完整的对象(你的实际上只是一个例子),我会将对象存储为键的值,而不仅仅是将对象存储在数组中.也就是说,使它成为一个地图,而不是一个数组.


jAn*_*ndy 10

由于你有一个填充了Objects的数组,你需要这样做:

(ES3)

function lookup( name ) {
    for(var i = 0, len = arr.length; i < len; i++) {
        if( arr[ i ].key === name )
            return true;
    }
    return false;
}

if( !lookup( 'key1' ) ) {
    arr.push({
        key: 'key1',
        value: 'z'
    });
}
Run Code Online (Sandbox Code Playgroud)


Jam*_*ice 5

filter如果未通过测试,可以使用ECMAScript 5 方法从数组中删除元素.如果生成的数组没有元素,那么您知道没有任何元素:

if(!arr.filter(function(elem) {
    return elem.key === "key1";
}).length) {
    arr.push({ key: "key1", value: "z" });
}
Run Code Online (Sandbox Code Playgroud)

如果您希望它在旧版浏览器中工作,则需要使用填充程序来确保Array.prototype.filter定义.