使用数组中的值递归填充对象

时间:2018-04-26 12:17:20

标签: javascript ecmascript-6

我试图改变这个:

['value1', 'value2', 'value3']

在此:

{
    value: 'value1',
    parent: {
        value: 'value2',
        parent: {
            value: 'value3'
        }
    }
}

反过来......
有人知道在ES6中做到这一点的最佳方法吗?

3 个答案:

答案 0 :(得分:1)

您可以使用Array#reduceRight并在检查父级时构建对象。



var array = ['value1', 'value2', 'value3'],
    result = array.reduceRight(
        (parent, value) => Object.assign({ value }, parent && { parent }),
        undefined
    );
    
console.log(result);




答案 1 :(得分:0)

没有"最好的"方式。

reduce的一些有趣用法:



let converted = {};
['value1', 'value2', 'value3'].reduce((res, el) => (res.value=el, res.parent={}), converted);

console.log(converted);




或者reverse



let result =   ['value1', 'value2', 'value3'].reverse()
    .reduce((res, el) => res?{value: el, parent: res}:{value: el}, null);

console.log(result);




答案 2 :(得分:0)

保持对原始对象的引用,并为每次循环

创建父节点



var arr = ['value1', 'value2', 'value3']

var obj = head = {}
arr.forEach(val=> {
   obj['value'] = val;
   obj['parent'] = {}
   obj = obj.parent
})

console.log(head);