繁体   English   中英

如何从对象数组映射键和值?

[英]How to map key and value from array of objects?

我通过$ 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();
    ];
});

您可以在一个.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);
    }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM