我有一个类似的数组
[ {a: 1}, {b:2}, {c:3} ]
我想将此数组转换为如下对象:
{ a: 1, child: {b: 2, child: { c: 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)包含两个属性的对象:
(3)child:o {},一个包含两个属性的对象:
(5)child:o {},一个包含一个属性的对象:
所以,给定;
[ {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]
希望这有帮助。