如何将数组转换为具有child作为javascript下一个数组项的对象?

时间:2015-05-12 14:12:55

标签: javascript

我有一个类似的数组 [ {a: 1}, {b:2}, {c:3} ]

我想将此数组转换为如下对象:

{ a: 1, child: {b: 2, child: { c: 3 } } }

这是个问题。

3 个答案:

答案 0 :(得分:2)

ES5可以帮助您使用时尚的数组原型方法:

[{a:1}, {b:1}, {c:1}, {d:1}].reduceRight(function(child, parent) {
    parent.child = child;
    return parent;
});

这将完成工作。

答案 1 :(得分:0)

迭代数组,保持对根对象的引用,并在生成子对象时向下移动第二个引用

(function (arr) {
    var i, j, o = {}, e = o;
    for (i = 0; i < arr.length; ++i) {
        e = e.child = {};
        for (j in arr[i]) if (Object.prototype.hasOwnProperty.call(arr, j)) {
            e[j] = arr[i][j];
            break;
        }
    }
    return o.child;
}([{a: 1}, {b:2}, {c:3}])); // {a: 1, child: {b: 2, child: {c: 3 }}}

答案 2 :(得分:-1)

分解问题并了解所需内容

让我们将o表示为对象,并将以下内容解析为:

(1). {                               
  2.    "a": 1,                       
(3).    "child": {                      
  4.               "b"    : 1,              
(5).               "child": { 
  6.                           "c": 3 
  7.                        }  
  8.             } 
  9. }

(1)包含两个属性的对象:

  • a:1,孩子:o {}

(3)child:o {},一个包含两个属性的对象:

  • b:1,孩子:o {}

(5)child:o {},一个包含一个属性的对象:

  • C:3

所以,给定;

[ {a: 1}, {b:2}, {c:3} ]

您可以执行以下操作:

var o = { a:1, child { } };   // (1)
o.child = { b:2, child{ } };  // (3)
o.child.child = { c: 3 };     // (5)

当然,这只是为了说明理解。

上述解决方案是遍历每个Object,为每个值创建一个Object并将属性名称设置为键,再次将值设置为Object ...重复直到n

使用underscorejs,您可以使用_.map()作为以下内容:

_.map({one: 1, two: 2, three: 3}, function(num, key) { 
      return num * 3; 
});
=> [3, 6, 9]

希望这有帮助。