Javascript forEach不适用于json

时间:2015-06-30 09:41:07

标签: javascript json foreach

我有一次ajax返回数据,比如

{
    "results": [{
        "symbol": "AppConomy",
        "Name": null,
        "PriceSales": null
    }]
}

上面我的forEach函数工作正常,但是当返回相同的数据时

 {
     "results": {
         "symbol": "AppConomy",
        "Name": null,
        "PriceSales": null
    } 
}

我的forEach功能不起作用

 $.get(url, function(data){
        var x =data['results'];
        x.forEach(function logArrayElements(element, index, array) {
           $(self).append('<button class="tag-format" title="'+array[index].Name+'"  style="color:#fff;background-color:rgb(0,151,216);border:1px solid;border-radius:10px;">&nbsp;'+ array[index].symbol +" - "+ array[index].PriceSales +'&nbsp;</button>');
        });
     });

3 个答案:

答案 0 :(得分:2)

那是因为你的JSON不是一个数组。您可以使用Array.isArray()轻松预先检查。如果您要检索的数据实际上是JSON,那么您也应该使用getJSON

$.getJSON(url, function(data) {
    var x = data.results;
    if(Array.isArray(x)) {
        x.forEach(function logArrayElements(element, index, array) {
            $(self).append('<button class="tag-format" title="' + array[index].Name + '"  style="color:#fff;background-color:rgb(0,151,216);border:1px solid;border-radius:10px;">&nbsp;' + array[index].symbol + " - " + array[index].PriceSales + '&nbsp;</button>');
        });
    } else {
        $(self).append('<button class="tag-format" title="' + x.Name + '"  style="color:#fff;background-color:rgb(0,151,216);border:1px solid;border-radius:10px;">&nbsp;' + x.symbol + " - " + x.PriceSales + '&nbsp;</button>');
    }
});

答案 1 :(得分:0)

您的forEach用于迭代数组。在你的第二个JSON中,没有要迭代的数组,所以你需要直接在data['results']上调用函数:

$.get(url, function(data){
  var x = data['results'],
      addButton = function(item) {
        $(self).append('<button class="tag-format" title="'+array[index].Name+'"  style="color:#fff;background-color:rgb(0,151,216);border:1px solid;border-radius:10px;">&nbsp;'+ array[index].symbol +" - "+ array[index].PriceSales +'&nbsp;</button>');
      };
  if(Array.isArray(x)) {
    x.forEach(function logArrayElements(element, index, array) {
      addButton(array[index]);
    });
  } else {
    addButton(x);
  }
});

答案 2 :(得分:0)

Javascript对象不是数组。

HTML

<div id="results"></div>

的Javascript

var firstArray = {
"results": [{
    "symbol": "AppConomy",
    "Name": null,
    "PriceSales": null
}]};

var secondArray =  {
 "results": {
     "symbol": "AppConomy",
    "Name": null,
    "PriceSales": null
}};

//Result: 1
$("#results").append("<span>FirstArray result: " + firstArray['results'].length + "</span><br/>");

//Result: undefined
$("#results").append("<span>FirstArray result: " + secondArray['results'].length + "</span><br/>");