Javascript 将简单数组转换为以项作为子数组的复杂对象

Javascript 将简单数组转换为以项作为子数组的复杂对象,javascript,arrays,Javascript,Arrays,使用javascript ES6,我试图获得一个简单的算法来转换包含字符串的数组,无大小限制,因此我需要一个对象,该对象的标签为数组项,子数组中的每个项,这取决于他的位置,有点难以解释 这是我“之前”得到的和“之后”想要的 我完全被阻止了,感谢您提供的帮助您可以使用这些帮助从阵列创建结构 reduceRight()从末尾获取一个元素,用对象包装它,并将前面的结果添加到子数组中。由于最后一个对象没有子对象,因此子对象是使用条件分配的 const before=[“a”、“b”、“c”、“d”];

使用javascript ES6,我试图获得一个简单的算法来转换包含字符串的数组,无大小限制,因此我需要一个对象,该对象的标签为数组项,子数组中的每个项,这取决于他的位置,有点难以解释

这是我“之前”得到的和“之后”想要的

我完全被阻止了,感谢您提供的帮助

您可以使用这些帮助从阵列创建结构

reduceRight()
从末尾获取一个元素,用对象包装它,并将前面的结果添加到子数组中。由于最后一个对象没有子对象,因此子对象是使用条件分配的

const before=[“a”、“b”、“c”、“d”];
const after=before.reduceRight((r,name)=>
赋值({name},r!==null?{children:[r]}:{}),
无效);
console.log(之后)可用于从数组创建结构

reduceRight()
从末尾获取一个元素,用对象包装它,并将前面的结果添加到子数组中。由于最后一个对象没有子对象,因此子对象是使用条件分配的

const before=[“a”、“b”、“c”、“d”];
const after=before.reduceRight((r,name)=>
赋值({name},r!==null?{children:[r]}:{}),
无效);

console.log(之后)
另一个答案,不用那些花哨的
const
reduceRight
东西=D

var之前=[“a”、“b”、“c”、“d”];
var after=createChildren(之前);
console.log(之后);
函数createChildren(obj){
if(目标长度){
返回{name:obj.shift(),子项:[createChildren(obj)]};
}
返回新数组();

}
另一个答案,不用那些花哨的
const
reduceRight
东西=D

var之前=[“a”、“b”、“c”、“d”];
var after=createChildren(之前);
console.log(之后);
函数createChildren(obj){
if(目标长度){
返回{name:obj.shift(),子项:[createChildren(obj)]};
}
返回新数组();
}
这是我的解决方案:

const after=([name,…rest],children=rest.length&&[after(rest)]=>
儿童
? {name,children}
:{name};
常量before=['a','b','c','d'];
log(JSON.stringify(after(before),null,2))这是我的解决方案:

const after=([name,…rest],children=rest.length&&[after(rest)]=>
儿童
? {name,children}
:{name};
常量before=['a','b','c','d'];

log(JSON.stringify(after(before),null,2))此解决方案与Ori Dori的解决方案类似,但不使用


此解决方案与Ori Dori的解决方案类似,但不使用


你对使用递归持开放态度吗?是的,我对这一点不太了解。你对使用递归持开放态度吗?是的,我对这一点不太了解。。
before = ["a","b","c","d"]

after = {
        name: "a"
        children: [
            {
                name: "b",
                children: [
                    {
                        name: "c",
                        children: [
                            name: "d"
                        ]
                    }
                ]
            }
        ]
    }
["a","b","c","d"].reduceRight((r, v, i) => {
    r.name = v;
    return i === 0 ? r : { children: [r] }
}, {});