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

标签 javascript arrays angularjs

我通过 $http 有以下 JSON 响应:

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

我正在尝试在 Javascript 中创建一个 map 函数(或多个函数),以便我可以获得以下 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);
    }
});

关于javascript - 如何从对象数组映射键和值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34749467/

相关文章:

javascript - 如何使用 Lodash 按子数组的属性进行排序

javascript - 有什么方法可以确定 JavaScript 中哪个 or 语句是正确的吗?

javascript - AngularJS 指令绑定(bind)

javascript - 升级到 Angular 8 后延迟加载中的路由错误

javascript - Meteor 0.8.x 命名空间

javascript - 在 Ionic 中选择多个图像

javascript - 如何使用变量进行推送?

c# - 从循环 C# 添加到数组

arrays - 使用 Elixir 绘制数组的深度映射

javascript - 将一个文本框上的属性传递给另一个 div 按钮的 Angular 指令