Javascript / Jquery基于嵌套属性选择对象

时间:2014-02-14 05:43:18

标签: javascript jquery

我试图根据嵌套的嵌套ID检索嵌套对象。

所以我的目标如下

object = {
   1: {
      feature: {id:"1012"},
   }
   2: {
      feature: {id:"3032"}
   }
}

我有一个id,我需要检索相应的对象或更具体的对象id。该对象要复杂得多,但上面显示了我需要检索的值。

我没有很多JavaScript经验,所以我不确定如何实现这一目标。我尝试过使用Jquery的属性选择器,但还没有成功。

任何帮助都将不胜感激。

感谢。

2 个答案:

答案 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'

这样做:view it in JSFiddle

my post about the Map in js

答案 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更改为实际数字,这样您只需传入一个数字而不是一个数字就可以使它更直观。数字的字符串表示形式:==,同时保持严格的比较。