我有一个响应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];
}
}
答案 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)