javascript - 如何在数组中迭代两次

标签 javascript angularjs underscore.js

如何通过在数组中迭代两次来从数组中获取数据。例如我有一个数据集:

var data = [
    {"Fruits ":"Apples","Fresh":"12","Rotten":"5","Total":"17"},
    {"Fruits ":"Oranges","Fresh":"34","Rotten":"6","Total":"40"},
    {"Fruits ":"Strawberries","Fresh":"67","Rotten":"8","Total":"75"},
    {"Fruits ":"Bananas","Fresh":"23","Rotten":"5","Total":"28"}
]

首先,我想在右侧进行迭代并获取所有键,直到第一个对象的末尾,然后向下迭代,以便获得键的所有值,这样我就得到了

预期输出

 [{ 'name': 'Fresh',
    'data': [12, 34, 67, 23]
    }, 
    {
    'name': 'Rotten',
    'data': [5, 6, 8, 5]
    },
    {
    'name': 'total',
    'data': [17, 40, 75, 28]
    }]

到目前为止我已经试过了:

    var categorie = []
    var seriesNames = []
    var series = []

    for(var i=0; i<data.length; i++){
      categorie.push(_.values(data[i])[0])
    }

    for(i=1; i<data.length; i++){
        seriesNames.push(_.keys(data[0])[i])
    }

但我不知道如何获取数据数组并将其与 seriesName 连接。实时复制:plunker

编辑 键、值和数据长度是可变的,因为我处理的是动态数据。

最佳答案

您可以使用组数组并将其用于结果数组中的正确分组。

var data = [{ "Fruits ": "Apples", "Fresh": "12", "Rotten": "5", "Total": "17" }, { "Fruits ": "Oranges", "Fresh": "34", "Rotten": "6", "Total": "40" }, { "Fruits ": "Strawberries", "Fresh": "67", "Rotten": "8", "Total": "75" }, { "Fruits ": "Bananas", "Fresh": "23", "Rotten": "5", "Total": "28" }],
    groups = ["Fresh", "Rotten", "Total"],
    result = [];

data.forEach(function (a) {
    groups.forEach(function (b, i) {
        result[i] = result[i] || { name: b, data: [] };
        result[i].data.push(+a[b]);
    });
});

console.log(result);

只是对动态属性的提案略有改动。它只接受数量有限的属性。

var data = [{ "Fruits ": "Apples", "Fresh": "12", "Rotten": "5", "Total": "17" }, { "Fruits ": "Oranges", "Fresh": "34", "Rotten": "6", "Total": "40" }, { "Fruits ": "Strawberries", "Fresh": "67", "Rotten": "8", "Total": "75" }, { "Fruits ": "Bananas", "Fresh": "23", "Rotten": "5", "Total": "28" }],
    result = [];

data.forEach(function (a) {
    Object.keys(a).forEach(function (k) {
        if (isFinite(a[k])) {
            if (!this[k]) {
                this[k] = { name: k, data: [] };
                result.push(this[k]);
            }
            this[k].data.push(a[k]);
        }
    }, this);
}, Object.create(null));

console.log(result);

关于javascript - 如何在数组中迭代两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38205954/

相关文章:

javascript - AngularJS 无法读取未定义的属性

javascript - 从 AngularJS 访问我网站的 NodeJS Express API

javascript - knockout template - 将文本绑定(bind)到函数,并传入模板数据

javascript - Underscore.js 为什么使用 "switch' 而不是 "for loop"来处理案例

javascript - Firefox 触摸滚动不起作用

javascript - 如何在 Javascript 中解析 JSON 文件?

javascript - 如何将这个 Javascript 包装为一个函数?

javascript - 使用 ng-view 和 UI Bootstrap 的 AngularJS 动画

javascript - 在 AngularJS 中使用对象作为字典或列表?

javascript - 使用 SQLite3 + Node.js 的最佳实践