基于Javascript中较低级别的属性访问JSON密钥
问题描述:
我很确定这已被问过,但我似乎无法找到解决方案,因为缺乏适当的词来描述问题。基于Javascript中较低级别的属性访问JSON密钥
我试图根据对象的下一个键的值(例如"name":"name1"
)访问对象的对象的键(例如"ID1"
)。 JSON对象包含不同的ID对象,每个ID对象都包含一个名称和其他属性。
mydata = {
"ID1": {"name":"name1","akey":true,"anotherkey":"foor"},
"ID2": {"name":"name2","akey":true,"anotherkey":"bar"},
"ID3": {"name":"name3","akey":false,"anotherkey":"foo"}
}
这是很简单的,以获得name
,如果我知道ID
,如:
myname = mydata["ID1"].name; //returns "name1"
但我想要做的就是对象的ID
如果我知道它name
,所以简而言之,就是上面一行的反面。有没有简单的解决方案(纯JavaScript或jQuery)?注意:我知道这些名字是独一无二的。
答
如果我正确理解你,Object.keys()可以帮到你。这将是这个样子:
var mydata = {
"ID1": {"name":"name1","akey":true,"anotherkey":"foor"},
"ID2": {"name":"name2","akey":true,"anotherkey":"bar"},
"ID3": {"name":"name3","akey":false,"anotherkey":"foo"}
}
Object.keys(mydata).forEach(function(id) {
var obj = mydata[id];
if (obj.name === "name1") {
// I found an object based on the "name" property.
// the 'id' variable holds a reference to it.
}
});
答
var mydata = {
"ID1": {"name":"name1","akey":true,"anotherkey":"foor"},
"ID2": {"name":"name2","akey":true,"anotherkey":"bar"},
"ID3": {"name":"name3","akey":false,"anotherkey":"foo"}
}
var parentId = Object.keys(mydata).find(function(key){
return mydata[key].name === 'name2';
});
console.log(parentId);
答
做到这一点的唯一方法,就是在遍历每个属性值。
var result = null;
for(var key in mydata) {
if(mydata[key].name==='name1'){
result = key;
break;
}
}
console.log(result);