使用Javascript检查JSON对象是否包含值
我想检查像下面这样的JSON对象中的某个键是否包含某个值。假设我想检查任何对象中的键“name”是否具有值“Blofeld”(这是真的)。我该怎么做使用Javascript检查JSON对象是否包含值,javascript,json,object,key,Javascript,Json,Object,Key,我想检查像下面这样的JSON对象中的某个键是否包含某个值。假设我想检查任何对象中的键“name”是否具有值“Blofeld”(这是真的)。我该怎么做 [ { "id" : 19, "cost" : 400, "name" : "Arkansas", "height" : 198, "weight" : 35 }, { "id" : 21, "cost" : 250, "name" : "Blofeld", "height" : 216, "weight"
[ {
"id" : 19,
"cost" : 400,
"name" : "Arkansas",
"height" : 198,
"weight" : 35
}, {
"id" : 21,
"cost" : 250,
"name" : "Blofeld",
"height" : 216,
"weight" : 54
}, {
"id" : 38,
"cost" : 450,
"name" : "Gollum",
"height" : 147,
"weight" : 22
} ]
通过简单循环遍历数组中的所有对象,使用:
var json=[…];
var wantedKey='';//这是你的钥匙
var wantedVal=“”;//你在这里的价值
for(var i=0;i
这将为您提供一个数组,其中的元素与name==“Blofeld”匹配:
var数据=[{
“id”:19,
“成本”:400,
“姓名”:“阿肯色州”,
“高度”:198,
“重量”:35
}, {
“id”:21,
“成本”:250,
“姓名”:“布洛菲尔德”,
“高度”:216,
“重量”:54
}, {
“id”:38,
“成本”:450,
“名称”:“咕噜”,
“高度”:147,
“重量”:22
} ];
var result=data.filter(x=>x.name==“Blofeld”);
控制台日志(结果)代码>编写一个简单函数来检查对象数组是否包含特定值
var arr=[{
"name" : "Blofeld",
"weight" : 54
},{
"name" : "",
"weight" : 22
}];
function contains(arr, key, val) {
for (var i = 0; i < arr.length; i++) {
if(arr[i][key] === val) return true;
}
return false;
}
console.log(contains(arr, "name", "Blofeld")); //true
console.log(contains(arr, "weight", 22));//true
console.log(contains(arr, "weight", "22"));//false (or true if you change === to ==)
console.log(contains(arr, "name", "Me")); //false
var-arr=[{
“姓名”:“布洛菲尔德”,
“重量”:54
},{
“名称”:“,
“重量”:22
}];
函数包含(arr、键、val){
对于(变量i=0;i
您也可以使用数组。some()
函数:
const arr=[
{
身份证号码:19,
费用:400美元,
名称:“阿肯色州”,
身高:198,
体重:35
},
{
id:21,
费用:250,
姓名:'Blofeld',
身高:216,
体重:54
},
{
身份证号码:38,
费用:450,
名称:“咕噜”,
身高:147,
体重:22
}
];
log(arr.some(item=>item.name=='Blofeld');
log(arr.some(item=>item.name=='Blofeld2');
//使用lodash搜索对象
常量objToFind1={
id:21,
费用:250,
姓名:'Blofeld',
身高:216,
体重:54
};
常量objToFind2={
id:211,
费用:250,
姓名:'Blofeld',
身高:216,
体重:54
};
log(arr.some(item=>\uu.isEqual(item,objToFind1));
log(arr.some(item=>\uu.isEqual(item,objToFind2))代码>
obj.name==“Blofeld”
当然,钥匙不见了。我刚刚编辑过,谢谢!非常感谢!这就是我所寻求的解决方案,它非常有效!为此,我发现有些()比其他任何选项更具可读性。虽然如果我错了,请纠正我,但是some()比filter()慢,对吗?我认为filter
和some
方法的速度差不多,它们都必须为每次迭代执行一个函数,然而,“some”方法在其函数第一次返回true时会停止迭代filter
方法将迭代整个数组。因此,如果我需要布尔值来回答是否至少有一个数组项满足给定的条件,我会使用some
,如果我需要从给定的数组中检索子集数组,我会使用filter
。如果我需要应用于单个对象而不是数组怎么办?@WhoAmI,我建议使用lodash
的isEqual()
函数()。查看我的更新答案,其中找到了objToFind1
,而没有找到objToFind2
。感谢您回答我的问题!我没有尝试,因为@Andriy的解决方案更简单/更短。我同意Andriy有一个更简单的解决方案。我想这是经验上的差距。谢谢你回答我的问题!我采用了@Andriy的解决方案,所以我没有尝试这个。坚如磐石的答案!如果我想要一个包含该值的特定记录,就像我想要返回记录(对象数组中的特定对象),如果它包含的值不是true和false,那么该怎么办
var arr=[{
"name" : "Blofeld",
"weight" : 54
},{
"name" : "",
"weight" : 22
}];
function contains(arr, key, val) {
for (var i = 0; i < arr.length; i++) {
if(arr[i][key] === val) return true;
}
return false;
}
console.log(contains(arr, "name", "Blofeld")); //true
console.log(contains(arr, "weight", 22));//true
console.log(contains(arr, "weight", "22"));//false (or true if you change === to ==)
console.log(contains(arr, "name", "Me")); //false