gpt4 book ai didi

javascript - 从嵌套对象数组中递归创建字符串?

转载 作者:行者123 更新时间:2023-11-28 17:22:42 26 4
gpt4 key购买 nike

最终,我不确定这是否是解决此问题的正确方法,因此我愿意接受建议。

我想做的是编写一个递归函数,在迭代对象数组的每个元素时调用该函数。该函数应该采用数组元素,递归地迭代其值和嵌套对象。

因此,例如,在迭代嵌套对象的 array 时可能会调用该函数,如下所示...

arrayOfNestedObjects.map(el => objectValues(el))

我正在使用https://jsonplaceholder.typicode.com/获取这种形状的对象数组...

{
id: 10,
name: 'Clementina DuBuque',
username: 'Moriah.Stanton',
email: 'Rey.Padberg@karina.biz',
address: {
street: 'Kattie Turnpike',
suite: 'Suite 198',
city: 'Lebsackbury',
zipcode: '31428-2261',
geo: {
lat: '-38.2386',
lng: '57.2232'
}
},
phone: '024-648-3804',
website: 'ambrose.net',
company: {
name: 'Hoeger LLC',
catchPhrase: 'Centralized empowering task-force',
bs: 'target end-to-end models'
}
}

我想要从递归函数返回的是一个由数组每个元素的所有值组成的单个串联字符串,包括来自任何嵌套对象的所有值,就像上面的例子一样..

"10clementinadubuquemoriah.stantonrey.padberg@karina.bizkattieturnpikesuite198lebsackbury31428-2261-38.238657.2232024-648-3804ambrose.nethoegerllccentralizedempoweringtask-forcetargetend-to-endmodels"

我遇到的问题是,我的递归函数似乎有一个最终调用,它返回一个字符串,省略了一些嵌套对象中的所有值。这是我迄今为止的功能......

function objectValues(value, ...args) {
let string = args;
Object.values(value).forEach((val, i) => {
if (typeof val === 'object' && val !== null) {
objectValues(val, string);
} else {
string += val
.toString()
.replace(/\s/g, '')
.toLowerCase();
console.log(string);
}
});
return string;
}

else 子句中记录 string 会显示我想要的字符串,但在 return 上方记录 string code> 显示了缺少 company 对象中的值的错误字符串。关于如何设置递归,我错过了一些简单的事情。感谢您的任何建议!

最佳答案

...args 参数使事情变得比应有的更加复杂。如果 ...args 是一个数组,将其重命名 let string = args 会非常令人困惑 - 特别是,正如您稍后所见,当您do string += ... (但是 +=数组没有多大意义)

相反,只需在函数开头声明一个空字符串,必要时将其连接起来,然后在函数末尾返回它。当您将数组压缩为单个值(例如字符串)时,reduceforEach 更合适:

const value={id:10,name:'Clementina DuBuque',username:'Moriah.Stanton',email:'Rey.Padberg@karina.biz',address:{street:'Kattie Turnpike',suite:'Suite 198',city:'Lebsackbury',zipcode:'31428-2261',geo:{lat:'-38.2386',lng:'57.2232'}},phone:'024-648-3804',website:'ambrose.net',company:{name:'Hoeger LLC',catchPhrase:'Centralized empowering task-force',bs:'target end-to-end models'}}

function objectValues(value) {
return Object.values(value).reduce((string, val, i) => string + (
(typeof val === 'object' && val !== null)
? objectValues(val)
: val
.toString()
.replace(/\s/g, '')
.toLowerCase()
));
}

console.log(objectValues(value));

另一种选择是利用 JSON.stringify 的自然递归特性:

const value={id:10,name:'Clementina DuBuque',username:'Moriah.Stanton',email:'Rey.Padberg@karina.biz',address:{street:'Kattie Turnpike',suite:'Suite 198',city:'Lebsackbury',zipcode:'31428-2261',geo:{lat:'-38.2386',lng:'57.2232'}},phone:'024-648-3804',website:'ambrose.net',company:{name:'Hoeger LLC',catchPhrase:'Centralized empowering task-force',bs:'target end-to-end models'}}

function objectValues(value) {
let string = '';
JSON.stringify(value, (_, val) => {
if (typeof val === 'string') string += val.replace(/\s/g, '').toLowerCase();
return val;
});
return string;
}

console.log(objectValues(value));

关于javascript - 从嵌套对象数组中递归创建字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52142603/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com