从JSON对象检索数据

时间:2016-05-04 19:33:26

标签: javascript angularjs json

我有一个响应JSON对象,它有一个series对象数组,如下所示:

{
series: [
    {
    name: 'a',
    data: [1,2,3]
    },
    {
    name: 'b',
    data: [4,5,6]
    }
]
}

我想要的是检索与data值对应的name值。

到目前为止,我已经谈到了这一点:

$scope.nameArr[i] = response.series[i].name;

这给了我正确的name数组,但对于相应的数据值,我的下面的代码失败了

for(var i=0; i<response.series.length; i++) {
    $scope.nameArr[i] = response.series[i].name;
       for (var j=0; j<response.series[i].data.length; j++){                                
             $scope.dataArr[j] = response.series[i].data[j];
       }
}

3 个答案:

答案 0 :(得分:0)

试试这个:

angular.forEach(series,function(item,index){
    $scope.nameArr.push(item.name);
    $scope.dataArr.push(item.data);
})

答案 1 :(得分:0)

您可以使用array.filter按名称获取数据。 for循环也可以工作,你不需要嵌套循环。

我更喜欢过滤器,因为它更易于阅读,但for循环的执行时间可能要快一些。

请查看下面的演示或此fiddle

var response = {
  series: [{
    name: 'a',
    data: [1, 2, 3]
  }, {
    name: 'b',
    data: [4, 5, 6]
  }]
};

function getDataByName(name) {
  return response.series.filter(function(item, index) {
    console.log(item);
    return (item.name == name);
  });
}

var filtered = getDataByName('a');
console.log(filtered[0].data);
$('#result').append('with filter: ' + JSON.stringify(filtered[0].data) + '<br/>');

var item, series = [];
var queryByName = 'a';

for (var i = 0; i < response.series.length; i++) {
  item = response.series[i];
  if (item.name == queryByName) {
    series.push(item);
  }
}

$('#result').append('with for loop: ' + JSON.stringify(series[0].data));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="result"></div>

答案 2 :(得分:-1)

Javascript解决方案,只需更改foreach循环的方式

angular.forEach(array, function(item)....etc

下面:

    var x = {
series: [
    {
    name: 'a',
    data: [1,2,3]
    },
    {
    name: 'b',
    data: [4,5,6]
    }
]
}

var results = [];
x.series.forEach(function(item) {
    item.data.forEach(function(subitem) {
    results.push(subitem);
  })
});

console.log(results)

https://jsfiddle.net/6worooos/1/