0

我有下面的 javascript 数组

var test =[{
Maths:{
    ST1:10,
    ST2:2,
    ST3:15}
},
{
Science:{
    ST1:50,
    ST3:40}
    }
]

我想从中生成如下所示的数组

var t = [{ST1:{
               Maths:10,
               Science:50
              },
          ST2:{
               Maths:2,
               Science:0
              },
          ST3:{
               Maths:15,
               Science:40
              }
         }]

我尝试使用下面显示的代码

for (var key in test) {
  if (test.hasOwnProperty(key)) {
  for (var key1 in test[key]){
    //console.log(key1)}
    var abc = test[key][key1];
    for(var x in abc)
    {

    console.log(x+key1+abc[x])

    }

    }
  }
}

我是新手,帮我做这件事。

4

4 回答 4

1

这主要是你想要的......

var t = {};
for (var i = 0; i < test.length; i++) {
    for (var name in test[i]) {
        for (var level in test[i][name]) {
            if (!t[level])
                t[level] = {}
            t[level][name] = test[i][name][level]
        }
    }
}

唯一缺少的是在某个部分下缺少值Science:0时获取 for 。STx

演示:http: //jsfiddle.net/eHwBC/

结果:

{
    "ST1": {
        "Maths": 10,
        "Science": 50
    },
    "ST2": {
        "Maths": 2
    },
    "ST3": {
        "Maths": 15,
        "Science": 40
    }
}

for-in请记住,用于枚举时没有保证顺序。

如果标签(数学、科学等)是预先知道的,那么您可以确保每个对象都获得所有标签。

如果没有,可以进行单独的循环。根据方法的不同,它可以在这个主循环之前或之后完成。

于 2012-06-07T19:07:26.673 回答
0

尝试如下,

/* Iterator start */
var t = {};
for (var i = 0; i < test.length; i++) {  //Iterate Maths, Science,..   
    for (var key in test[i]) {           //Iterate Math
        for (var iKey in test[i][key]) { //Iterate ST1, ST2, ST3
          var s = (t.hasOwnProperty(iKey))?t[iKey]:createObject();                    
          s[key] = test[i][key][iKey];
          t[iKey] = s;
        }
    }
}
/* Iterator End */ 

p = [];
p.push(t);
//^- p is what you want

// Separate function so you can add more items later without changing logic
function createObject () {
    return {'Maths' : 0, 'Science': 0};
}

下面的演示和证明,

在此处输入图像描述

于 2012-06-07T19:09:43.363 回答
0

你知道JSON.stringify(t)吗?

它将对象文字转换为 JSON。

Mozilla 关于这个函数的文档可以在https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/JSON/stringify找到。

你也可以阅读这篇博客文章以获得进一步的解释

于 2012-06-07T18:48:13.873 回答
0

尝试这个:

var test =[{
Maths:{
    ST1:10,
    ST2:2,
    ST3:15
    }
},
{
Science:{
    ST1:50,
    ST3:40}
    }
];

var result = [];
for(i = 0; i <= test.length; i++){
  var resultRow = {};
  for(key in test[i]){
    for(subKey in test[i][key]){
      if(resultRow[subKey] == undefined){
        resultRow[subKey] = {};
      }
      resultRow[subKey][key] = test[i][key][subKey];
    }
  }
  result.push(resultRow);
}
于 2012-06-07T19:19:55.793 回答