2016-03-08 65 views
-2

我已经有了对象的一个​​这样的数组:Array对象的变换

[ 
    { week: 1, day: 1, todo: "eq1" }, 
    { week: 1, day: 3, todo: "eq2" }, 
    { week: 4, day: 6, todo: "eq3" }, 
    { week: 4, day: 7, todo: "eq4" }, 
] 

我想转换为某事像这样:

[ 
    1: { 
     1: { todo: "eq1" }, 
     3: { todo: "eq2" } 
    }, 
    4: { 
     6: { todo: "eq3" }, 
     7: { todo: "eq4" } 
    } 
] 

我该怎么办呢?

回答

1

我建议使用一个数组作为待办事项列表,因为您可能在列表中有多个项目要做。

var data = [{ week: 1, day: 1, todo: "eq1" }, { week: 1, day: 3, todo: "eq2" }, { week: 4, day: 6, todo: "eq3" }, { week: 4, day: 7, todo: "eq4" }], 
 
    object = function (data) { 
 
     var r = {}; 
 
     data.forEach(function (a) { 
 
      r[a.week] = r[a.week] || {}; 
 
      r[a.week][a.day] = r[a.week][a.day] || []; 
 
      r[a.week][a.day].push({ todo: a.todo }); 
 
     }); 
 
     return r; 
 
    }(data); 
 

 
document.write('<pre>' + JSON.stringify(object, 0, 4) + '</pre>');

解决方案要求(它覆盖同一个星期,日待办事项!):

var data = [{ week: 1, day: 1, todo: "eq1" }, { week: 1, day: 3, todo: "eq2" }, { week: 4, day: 6, todo: "eq3" }, { week: 4, day: 7, todo: "eq4" }], 
 
    object = function (data) { 
 
     var r = {}; 
 
     data.forEach(function (a) { 
 
      r[a.week] = r[a.week] || {}; 
 
      r[a.week][a.day] = { todo: a.todo }; 
 
     }); 
 
     return r; 
 
    }(data); 
 

 
document.write('<pre>' + JSON.stringify(object, 0, 4) + '</pre>');

+1

你打我吧,我结束了同模式,对不起,没有仔细检查:) +1 –

0

@Sergey是部分正确的。您不会达到与存储在阵列中相同的输出,其他值将设置为null。您也应该使用Object

注意这仅仅是演示目的的示例代码,所以我刚才检查resultObj的可用性

var data = [ 
 
    { week: 1, day: 1, todo: "eq1" }, 
 
    { week: 1, day: 3, todo: "eq2" }, 
 
    { week: 4, day: 6, todo: "eq3" }, 
 
    { week: 4, day: 7, todo: "eq4" }, 
 
]; 
 

 
var resultObj = {}; 
 
var resultArr = []; 
 

 
data.forEach(function(item) { 
 
    if (!resultObj[item.week]){ 
 
    resultObj[item.week] = {}; 
 
    resultArr[item.week] = {}; 
 
    } 
 

 
    if(!resultObj[item.week][item.day]){ 
 
    resultObj[item.week][item.day] = {"todo": item.todo} 
 
    resultArr[item.week][item.day] = {"todo": item.todo} 
 
    } 
 
}); 
 

 
document.write("Object:<br/> <pre>" + JSON.stringify(resultObj, 0,4) + "</pre>"); 
 
document.write("Array: <br/> <pre>" + JSON.stringify(resultArr, 0,4) + "</pre>");