我有以下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])
}
}
}
}
我是新手,帮助我这样做。
答案 0 :(得分: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
值时获取STx
。
DEMO: http://jsfiddle.net/eHwBC/
结果:
{
"ST1": {
"Maths": 10,
"Science": 50
},
"ST2": {
"Maths": 2
},
"ST3": {
"Maths": 15,
"Science": 40
}
}
请注意,使用for-in
进行枚举时无法保证订单。
如果预先知道标签(数学,科学等),那么您可以确保每个对象都获得所有标签。
如果没有,可以进行单独的循环。根据方法,可以在此主循环之前或之后完成。
答案 1 :(得分:0)
JSON.stringify(t)
吗?它会将对象文字转换为JSON。
Mozilla在https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/JSON/stringify上提供了此功能的文档。
您还可以阅读this blog article以获取进一步说明
答案 2 :(得分: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};
}
DEMO以及下面的证明,
答案 3 :(得分: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);
}