我试图根据嵌套的嵌套ID检索嵌套对象。
所以我的目标如下
object = {
1: {
feature: {id:"1012"},
}
2: {
feature: {id:"3032"}
}
}
我有一个id,我需要检索相应的对象或更具体的对象id。该对象要复杂得多,但上面显示了我需要检索的值。
我没有很多JavaScript经验,所以我不确定如何实现这一目标。我尝试过使用Jquery的属性选择器,但还没有成功。
任何帮助都将不胜感激。
感谢。
答案 0 :(得分:1)
如果你的“id”是1或2的意思 这样做:view it in JSFiddle
var obj = {
1: {
feature: {id:"1012"}
},
2: {
feature: {id:"3032"}
}
}
var getById = function(id){
return obj[id];
}
alert(getById(1).feature.id);
另一种方式,如果你的id意思是'1012','3032'
答案 1 :(得分:1)
如果我正确理解了这个问题,那么您正尝试使用每个id
属性中对象的feature
属性来从{{获取密钥(1,2等) 1}?因此,如果您输入object
,则会返回"1012"
,如果您输入1
,则会获得"3032"
等?
如果是这样,那就行了:
2
您可以使用this fiddle中的代码。
作为字符串存储的数字可能很痛苦,并且经常会导致人们如何调用这样的函数。您可能注意到的一件事是我使用了var object = {
1: {
feature: {id:"1012"}
},
2: {
feature: {id:"3032"}
}
},
getIdByFeatureId = function (featureId) {
var id,
subObject;
// loop through each property of the object
for (id in object) {
// protect ourselves in case someone has tampered with Object.prototype
if (object.hasOwnProperty(id)) {
subObject = object[id];
if (subObject.feature.id === featureId) {
return id;
}
}
}
// none found? return null.
return null;
};
getIdByFeatureId("3032"); // returns 2
getIdByFeatureId("1012"); // returns 1
getIdByFeatureId("90210"); // returns null
严格相等运算符。如果两个值完全相同(包括其类型),则仅返回true。除非绝对不能,否则使用严格的比较运算符是一种很好的做法。它也稍微快一些,因为它不必将值强制转换为类似的类型。但这意味着您必须将字符串传递给函数才能匹配。如果您需要更加灵活,可以使用非严格等于===
。如果所有的特征ID都是数字的(并且它们都没有前导零)并且您有能力,我会将特征ID更改为实际数字,这样您只需传入一个数字而不是一个数字就可以使它更直观。数字的字符串表示形式:==
,同时保持严格的比较。