Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检查对象数组中是否存在我的密钥_Javascript - Fatal编程技术网

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

Javascript 如何检查对象数组中是否存在我的密钥,javascript,Javascript,如何检查我的键:“key1”是否已存在。如果它不存在,我需要在ma数组中添加密钥 var arr = [{ key: "key1", value: "z" }, { key: "key2", value: "u" }, { ... }]; 为了方便起见,您应该这样存储数据: if(arr.hasOwnProperty("key1")){ arr.unshift({key:"key1", value:"z"}); } 然后,您可以进行检查,如果您的键与对象上的任何

如何检查我的
键:“key1”
是否已存在。如果它不存在,我需要在ma数组中添加密钥

var arr = [{
   key: "key1", value: "z"
}, {
   key: "key2", value: "u"
}, {
   ...
}];

为了方便起见,您应该这样存储数据:

if(arr.hasOwnProperty("key1")){
      arr.unshift({key:"key1", value:"z"});
}
然后,您可以进行检查,如果您的键与对象上的任何现有属性都不冲突,并且不需要空值,则可以简化检查

var map = {
       "key1": "z",
       "key2": "u"
};
如果您确实需要完整的对象(您的对象毕竟只是一个示例),我会将该对象存储为键的值,而不仅仅是将对象存储在数组中。也就是说,让它成为一个映射,而不是一个数组。

var-key;
if (!map["key1"]) {
   map["key1"] = "z";
}
对于(变量i=0;i
由于您有一个充满对象的数组,您需要像这样做:

(ES3)

函数查找(名称){
对于(变量i=0,len=arr.length;i
如果元素未通过测试,可以使用ECMAScript 5方法从数组中删除元素。如果生成的数组没有元素,则您知道您的值中没有元素:

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

如果希望它在较旧的浏览器中工作,则需要使用垫片来确保定义了
Array.prototype.filter

您可以检查数组和对象,查看数组键或对象属性是否存在。它非常有用,用于检查这两种类型的方法相同

if(!arr.filter(function(elem) {
    return elem.key === "key1";
}).length) {
    arr.push({ key: "key1", value: "z" });
}
作为对象


下面是@jAndy公认答案的两个更明确的版本

我为自己制作了第一个版本,以便更好地理解逻辑,并添加了以下内容:

如果该键确实存在,则增加匹配项的count属性 对象,否则创建计数为1的新对象

在第二个版本中,我意识到我更希望我的
arrayOfObjects
变量是一个
对象
,这样以后我可以专门针对值,而不是在数组上循环,直到找到匹配项,然后获得相关的对象值。因此,该版本使用对象而不是对象数组

版本01-对象数组

//基于:https://stackoverflow.com/a/9177103/1063287
//对象的原始数组
变量arrayofObjects=[{
id:“CY01”,
计数:1
},
{
id:“CY33”,
计数:5
},
{
id:“CY55”,
计数:8
}
];
//在界面中显示数组
$(.before”).text(JSON.stringify(arrayofObjects));
//定义查找函数(必须有权访问arrayofObjects)
函数查找(键到键检查){
//对于对象数组中的每个对象
对于(变量i=0;i
正文{
字体系列:arial;
字号:14px
}

输入现有或不存在的密钥,然后单击“运行”

如果存在,则增加计数,否则创建计数为1的新对象



对象数组-之前: 检查: 对象数组-之后:
if(!arr.filter(function(elem) {
    return elem.key === "key1";
}).length) {
    arr.push({ key: "key1", value: "z" });
}
/**
 * Check if an array key or object property exists
 * @key - what value to check for
 * @search - an array or object to check in
 */
function key_exists(key, search) {
    if (!search || (search.constructor !== Array && search.constructor !== Object)) {
        return false;
    }
    for (var i = 0; i < search.length; i++) {
        if (search[i] === key) {
            return true;
        }
    }
    return key in search;
}
key_exists('jared', ['jared', 'williams']); //= true
key_exists('jared', {'jared': 'williams'}); //= true