2016-05-04 100 views
0

檢索數據我有具有series陣列對象的這樣的響應JSON對象:從JSON對象

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

我想是檢索對應於namedata值。

到目前爲止,我已經來到了這個:

$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

試試這個 angular.forEach(系列,功能(項目){$ scope.nameArr.push(item.name);} ) –

+0

什麼是你期望的結果? – alphapilgrim

回答

-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/

+0

這不是他想要的。他怎麼可以通過這種方式來檢索數據數組? - > Downvote – badera

+0

然後它不清楚他想要什麼。問題應該以所需的json結果爲例進行更新。 – yBrodsky

0

試試這個:

angular.forEach(series,function(item,index){ 
    $scope.nameArr.push(item.name); 
    $scope.dataArr.push(item.data); 
}) 
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>