2016-01-12 56 views
0

我已經通過的$ HTTP以下JSON響應:如何映射對象數組中的鍵和值?

{ 
    "fruits": [ 
     { 
      "name": "apple", 
      "prices": [ 
       { 
        "2015": 2 
       }, 
       { 
        "2014": 3 
       }, 
       { 
        "2013": 5 
       } 
      ] 
     }, 
     { 
      "name": "banana", 
      "prices": [ 
       { 
        "2015": 1 
       }, 
       { 
        "2014": 3 
       }, 
       { 
        "2013": 4 
       } 
      ] 
     } 
    ] 
} 

我想在JavaScript中創建一個地圖功能(或多種功能),這樣我就可以得到以下2套:

$scope.new_data = [ 
    { 
     name: 'apple', 
     data: [5,3,2] 
    }, 
    { 
     name: 'banana', 
     data: [4,3,1] 
    } 
] 

$scope.years = ['2013','2014','2015'] 

也許這樣的事情......但我不知道如何的關鍵,從價值中分離:

$scope.new_data = $scope.fruits.map(function(fruit){ 
    return { 
     name: fruit.name, 
     data: fruit.prices 
    }; 
}); 

$scope.years = $scope.fruits.map(function(fruit){ 
    return [ 
     fruit.prices.reverse(); 
    ]; 
}); 

回答

1

你可以做到這一切在一個.map功能

var formattedData = data.fruits.map(function(fruit) { 
    return { 
     name: fruit.name, 
     data: fruit.prices.map(function(price) { 
      return price[Object.keys(price)[0]]; 
     }).reverse() 
    } 
}); 

var years = []; 
var allYears = data.fruits.map(function(fruit) { 
    //Get all years to 2d array 
    return fruit.prices.map(function(price) { 
     return Object.keys(price)[0]; 
    }); 
}).reduce(function(p, c) { 
    //Flatten 2d array 
    return p.concat(c) 
}, []); 

//Remove duplicates 
allYears.forEach(function(year) { 
    if (years.indexOf(year) === -1) { 
     years.push(year); 
    } 
}); 
+0

尼斯,對於數據的作品!多少年來呢? – trs

+0

@murid - 添加了一些代碼'年' – tymeJV

+0

這給出:['2015','2014','2013','2015','2014','2013']我認爲它循環兩次,還需要被翻轉 – trs

相關問題