在Javascript中访问多维对象时使用通配符

时间:2017-01-12 17:22:44

标签: javascript arrays json multidimensional-array geojson

我正在使用格式如下的GeoJSON数据集:

{
  "type": "Feature",
  "properties": {
    "startcong": "109",
    "district": "7",
    "statename": "Pennsylvania",
    "member": {
      "112": {
        "21168": {
          "party": "Republican",
          "name": "Meehan, Pat",
          "district": "7"
        }
      },
      "109": {
        "15447": {
          "party": "Republican",
          "name": "Weldon, Curt", "district": "7"}
        },
      "110": {
        "20744": {
          "party": "Democrat",
          "name": "Sestak, Joe",
          "district": "7"
        }
      },
      "111": {
        "20744": {
          "party": "Democrat",
          "name": "Sestak, Joe",
          "district": "7"
        }
      }
    },
    "endcong":
    "112",
    "id": "042109112007"
  }
}

我正在努力解决如何访问这些嵌套对象的问题。例如,我可以使用feature.properties.member[112][21168]来访问party属性。但是:

  • 第二个编号的对象(" 21168")并不总是一致编号。
  • 第二个编号对象始终是唯一的嵌套对象。

是否有办法使用通配符等方式访问相同的party属性?理想情况下,类似于feature.properties.member[112][*].party

2 个答案:

答案 0 :(得分:3)

如果第二个数字是唯一的嵌套对象,您可以找到使用内置Object.keys(obj)的数字,例如:

var obj = feature.properties.member[112],
    key = Object.keys(obj)[0],
    party = obj[key].party

可悲的是,没有用于访问属性的通配符,但是您可以非常简单地找到属性名称。

答案 1 :(得分:0)

你想找?

Function find(obj,word){
 if(obj[word]){
  return obj[word];
 }
 for(key in obj){
  if(typeof obj[key]=="Object"){
     var result=find(obj[key],word);
     if(result){
       return result;
     }
  }
  }
  return false;
  }

像这样使用:

party=find(json,"party");