Javascript 将名称之间带有点的数组映射到嵌套字段

Javascript 将名称之间带有点的数组映射到嵌套字段,javascript,arrays,string,performance,Javascript,Arrays,String,Performance,我正在尝试转换名称之间带有点的字符串数组。我想制作一个对象数组,如inconst-out。我试着用reduceRight,但我不知道如何组合字段 我的代码: const-input=[“苹果”,“香蕉.奇异果.葡萄”,“香蕉.橙子”,“香蕉.草莓”]; const res=input.map((项)=>{ 常量splInp=项目拆分('.'); 返回花键减速器右侧((附件,项目)=>{ if(对象键(acc).length!==0){ 返回{ 儿童:[acc], “名称”:项目 }; }否则{

我正在尝试转换名称之间带有点的字符串数组。我想制作一个对象数组,如in
const-out
。我试着用reduceRight,但我不知道如何组合字段

我的代码:

const-input=[“苹果”,“香蕉.奇异果.葡萄”,“香蕉.橙子”,“香蕉.草莓”];
const res=input.map((项)=>{
常量splInp=项目拆分('.');
返回花键减速器右侧((附件,项目)=>{
if(对象键(acc).length!==0){
返回{
儿童:[acc],
“名称”:项目
};
}否则{
返回{
“名称”:项目
};
}
},[]/*如有*/);
});
控制台日志(res)您可以使用

每当你得到一个字符串时,只要遍历你的树并最终添加任何叶子(如果你不能遍历更多)

const input=[“苹果”,“香蕉.奇异果.葡萄”,“香蕉.橙子”,“香蕉.草莓”,“苹果.是.好的”,“苹果.是.不.好的”];
常量Trie=()=>{
常量根={}
const add=s=>{
s、 拆分('.')。减少((acc,tok)=>{
如果(!acc[tok]){
//加上叶子
acc[tok]={子项:{}
}
//遍历节点
返回acc[tok]。子对象
},根)
}
const toJSON=(node=root)=>{
返回Object.entries(node.map)([name,{children}])=>({
名称,子项:toJSON(子项)
}))
}
返回{add,toJSON}
}
常数t=Trie()
input.forEach(t.add)

console.log(JSON.stringify(t.toJSON(),null,2))
在最后一个元素中,我们应该跳过children数组,所以应该是
{name:'草莓'},
{name:“草莓”,“children:[]}
如果toJSON(children)返回空,我允许您尝试修改toJSON以避免返回子元素。如果你仍然不能,我将更新@quippe