Javascript - 在多维数组中查找多个值

时间:2015-07-16 13:31:48

标签: javascript arrays loops object multidimensional-array

我需要一些JSON来获取一些ID。 JSON看起来像这样:

var carousel = [
  {
    "acf": {
      "content": [
        {
          "acf_fc_layout": "custom",
          "content": "Some text"
        },
        {
          "acf_fc_layout": "exhibition",
          "exhibition": 2594
        },
        {
          "acf_fc_layout": "exhibition",
          "exhibition": 1234
        }
      ]
    },
  }
]

对于每个content acf_fc_layout == exhibition,我必须获取展览的价值(ID),以便可以用来获取更多数据。正如您所看到的那样,还有多个展览ID。

我的困惑在于它既有对象又有数组,并且它们是嵌套的。我已经用jQuery完成了一些类似的东西,但这次不可能。不要以为我需要IE8支持,但仍然觉得这很棘手......

4 个答案:

答案 0 :(得分:1)

carousel[0].acf.content.forEach(function (item) {
  if (item["acf_fc_layout"] === "exhibition") {
    // do some stuff
    // id for exhibition placed in item["exhibition"] 
  }
});

答案 1 :(得分:1)

如果你的JSON看起来像你说的那样,这是一个简单的解决方案:

var i;
for (i = 0; i < carousel[0].acf.content.length; i++) {
    if (carousel[0].acf.content[i].acf_fc_layout === "exhibition") {
        // do something with carousel[0].acf.content[i].exhibition
    }
}

或者,如果您的JSON中有更多内容,这可能是相关的:

var i, j;
for (i = 0; i < carousel.length; i++) {
    if (typeof carousel[i].acf != 'undefined' && typeof carousel[i].acf.content != 'undefined') {
        for (j = 0; j < carousel[i].acf.content.length; j++) {
            if (carousel[i].acf.content[j].acf_fc_layout === "exhibition") {
                // do something with carousel[i].acf.content[j].exhibition
            }
        }
    }
}

答案 2 :(得分:0)

http://jsfiddle.net/oucp3v5x/

$(carousel).each(function(i, el){

    $(el.acf.content).each(function(i, el){
        if(el.acf_fc_layout === 'exhibition') {
            $('<div>', {
                text: el.exhibition
            }).appendTo($('#results'));
        }
    });

});

如果acf有很多content,则需要运行额外的循环,而acf必须是对象数组。

答案 3 :(得分:0)

使用当前结构,您需要使用foreach并检查值。

 var carousel = [
  {
    "acf": {
      "content": [
        {
          "acf_fc_layout": "custom",
          "content": "Some text"
        },
        {
          "acf_fc_layout": "exhibition",
          "exhibition": 2594
        },
        {
          "acf_fc_layout": "exhibition",
          "exhibition": 1234
        }
      ]
    },
  }
];

$.each(carousel[0].acf.content,function (i,v){
    if(v.acf_fc_layout == "exhibition")
        $(".result").append(v.exhibition+"<br>");
    });

JSFIddle