我有一个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
。请建议。
答案 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; //键是整数
var imdb = [{"123":"hi"}, {"234":"hello"}];
var valEventTime = "123";
var obj = imdb.some((val) => {
return Object.keys(val).includes(valEventTime);
})
console.log(obj);
&#13;