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