NodeJS:如何检查JSON对象数组中是否存在密钥

时间:2017-10-16 06:09:24

标签: javascript arrays json node.js

我有一个JSON对象数组imdb,我想检查一个密钥是否存在。我尝试了几种不同的方法,但没有一种显示正确的结果。我调查this post但没有帮助。代码

var imdb = [{"123":"hi"}, {"234":"hello"}];  //array of JSON object
var valEventTime = 123;                      //key I want to find if exists


//approach 1
function getValueByKey(key, data) {
    var i, len = data.length;

    for (i = 0; i < len; i++) {
        if (data[i] && data[i].hasOwnProperty(key)) {
            return data[i][key];
        }
    }

    return -1;
}

if(getValueByKey(valEventTime, imdb) > -1){
  console.log("Yes");

}
else {
  console.log("NOT")
}


//approach 2
if (imdb[valEventTime]) {
    console.log("Yes");
} else {
    console.log("NOT")
}

//approach 3
var keys=Object.keys(imdb)
for(var i=0;i<keys.length;i++){
     if(keys[i]==valEventTime)
     {//check your key here
       console.log("Yes")
     }
     else console.log("NOT")
}

即使我正在搜索已存在的密钥(NOT),输出也始终显示123。请建议。

2 个答案:

答案 0 :(得分:1)

您可以使用Array.some()来确定数组是否包含值。对于您要使用Array.includes()函数的每个项目,检查每个条目上从Object.keys()返回的项目的变量。在您的示例中,您的变量是一个整数,键是一个字符串 - 您可能希望在匹配中更具体。

var imdb = [{"123":"hi"}, {"234":"hello"}];
var valEventTime = "123"; // use a string to match the keys

// use Array.some() to loop through each item and short circuit when we return true
var hasKey = imdb.some(function(movie) {
  // get the object keys as an array and see if that array contains your variable
  // returning true will also return true from Array.some()
  return Object.keys(movie).includes(valEventTime);
});

答案 1 :(得分:1)

您的解决方案的问题是您正在尝试搜索整数键,其中您的json键是一个字符串。

  

var imdb = [{&#34; 123&#34;:&#34; hi&#34;},{&#34; 234&#34;:&#34; hello&#34;}]; // key是字符串

     

var valEventTime = 123; //键是整数

&#13;
&#13;
var imdb = [{"123":"hi"}, {"234":"hello"}]; 
var valEventTime = "123";  

var obj = imdb.some((val) => {
	return Object.keys(val).includes(valEventTime);
})

console.log(obj);
&#13;
&#13;
&#13;