我已经浏览了这个问题,但没有找到任何可能的解决方案。
假设我有一个这样的变量
var data = [
{
'a':10,
'b':20,
'c':30
},
{
'a':1,
'b':2,
'c':3
},
{
'a':100,
'b':200,
'c':300
}];
现在,我需要一个多维数组,如
var values = [[10,1,100], //a
[20,2,200], //b
[30,3,300]]; //c
我试过的是
var values = [];
for(var key in data[0])
{
values.push([]); // this creates a multidimesional array for each key
for(var i=0;i<data.length;i++)
{
// how to push data[i][key] in the multi dimensional array
}
}
注意: data.length
和键数不断变化,我只是想使用push()
没有任何额外的变量。即使我不想使用额外的for
循环
如果你们在这里发现任何重复的,只要把链接作为评论,不要downvote
试试这个:
var result = new Array();
for(var i = 0; i < data.length; i++) {
var arr = new Array();
for(var key in data[i]) {
arr.push(data[i][key]);
}
result.push(arr);
}
如果你不想要'arr'变量,也可以直接写入结果,但在我看来,上面的代码更容易理解:
for(var i = 0; i < data.length; i++) {
result.push(new Array());
for(var key in data[i]) {
result[i].push(data[i][key]);
}
}
好的,根据你的评论,我已经修改了循环。如果是你需要的,请检查答案并将问题标记为回答。就我个人而言,我不明白为什么你更喜欢混乱和难以理解的代码,而不是使用额外的变量,但这是完全不同的话题。
for(var i = 0; i < data.length; i++) {
for(var j = 0; j < Object.keys(data[0]).length; j++) {
result[j] = result[j] || new Array();
console.log('result[' + j + '][' + i + ']' + ' = ' + data[i][Object.keys(data[i])[j]])
result[j][i] = data[i][Object.keys(data[i])[j]];
}
}