如何通过在数组中迭代两次来从数组中获取数据。例如我有一个数据集:
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/