Javascript 递归地将数组转换为属性值

Javascript 递归地将数组转换为属性值,javascript,lodash,Javascript,Lodash,我使用的api以数组的形式返回单值属性。我希望这样,如果数组中只有1个值,那么该值应该是字符串,而不是字符串数组 我已经创建了下面的代码段,但是我得到了“超过了最大调用堆栈大小”,显然我处于循环中,但我不太确定如何打破它。关于如何递归映射对象并完成下面的示例,有什么建议吗 const original = { a: ['foo'], b: ['bar'], c:{ d:['baz'], e:[

我使用的api以数组的形式返回单值属性。我希望这样,如果数组中只有1个值,那么该值应该是字符串,而不是字符串数组

我已经创建了下面的代码段,但是我得到了“超过了最大调用堆栈大小”,显然我处于循环中,但我不太确定如何打破它。关于如何递归映射对象并完成下面的示例,有什么建议吗

    const original = {
        a: ['foo'],
        b: ['bar'],
        c:{
            d:['baz'],
            e:['buzz'],
            f:{
                g:['zip'],
                h:['zap']
            }
        }
    };

    exampleResult = {
        a:"foo",
        b:"bar",
        c:{
            d:"baz",
            e:"buzz",
            f:{
                g:"zip",
                h:"zap"
            }
        }
    }

    function transformer(item){
        return _.transform(original, (r, v, k) => {

            if(typeof v ==="object"){
            transformer(v[0])
            }
            if(Array.isArray(v)){
            r[k] = v[0];  
            }
        });
    }
    let result = transformer(original)
    console.log(result);
const-original={
答:['foo'],
b:[酒吧],
c:{
d:[baz'],
e:[嗡嗡声],
f:{
g:[zip'],
h:['zap']
}
}
};
函数变换(o){
const transformed={};
for(对象项(o)的常量[键,值]){
转换后的[key]=Array.isArray(值)→值[0]:转换(值);
}
收益转化;
}
console.log(转换(原始))
const-original={
答:['foo'],
b:[酒吧],
c:{
d:[baz'],
e:[嗡嗡声],
f:{
g:[zip'],
h:['zap']
}
}
};
函数变换(o){
const transformed={};
for(对象项(o)的常量[键,值]){
转换后的[key]=Array.isArray(值)→值[0]:转换(值);
}
收益转化;
}

console.log(转换(原始))此错误是由于始终将
原始文件
传输到
.transform()
此处:

return _.transform(original, (r, v, k)
递归的每个循环都返回到原始对象,并再次开始。要修复通行证

return _.transform(item, (r, v, k)
你还需要修正你的逻辑。数组也是对象,因此需要首先检查数组。如果当前值是一个数组,且其长度为1,则指定
val
第一项。如果不是,则使用整个值

现在检查
val
是否为对象,以及它是否为apply
transformer

const transformer=项目=>
_.变换(项,(r,v,k)=>{
//如果数组包含单个项,则提取第一项
const val=u.isArray(v)和&v.length==1?v[0]:v;
//检查控制柄值是否为对象,并进行相应变换
r[k]=等值线(val)-变压器(val):val;
});
常量原始={
答:['foo'],
b:[酒吧],
c:{
d:[baz'],
e:[buzz'、[nick'、[nack'],
f:{
g:[zip'],
h:['zap']
}
}
};
常量结果=变压器(原始);
控制台日志(结果)

此错误是由于始终将
原始文件
传输到
.transform()
此处:

return _.transform(original, (r, v, k)
递归的每个循环都返回到原始对象,并再次开始。要修复通行证

return _.transform(item, (r, v, k)
你还需要修正你的逻辑。数组也是对象,因此需要首先检查数组。如果当前值是一个数组,且其长度为1,则指定
val
第一项。如果不是,则使用整个值

现在检查
val
是否为对象,以及它是否为apply
transformer

const transformer=项目=>
_.变换(项,(r,v,k)=>{
//如果数组包含单个项,则提取第一项
const val=u.isArray(v)和&v.length==1?v[0]:v;
//检查控制柄值是否为对象,并进行相应变换
r[k]=等值线(val)-变压器(val):val;
});
常量原始={
答:['foo'],
b:[酒吧],
c:{
d:[baz'],
e:[buzz'、[nick'、[nack'],
f:{
g:[zip'],
h:['zap']
}
}
};
常量结果=变压器(原始);
控制台日志(结果)