【发布时间】:2019-02-08 02:08:03
【问题描述】:
最终,我不确定这是否是解决此问题的正确方法,所以我愿意接受建议。
我要做的是编写一个递归函数,在迭代对象数组的每个元素时调用该函数。该函数应采用数组元素,递归迭代其值和嵌套对象。
因此,例如,在迭代 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'
}
}
我想从我的递归函数中返回一个单一的串联字符串,该字符串由数组的每个元素的 all 值组成,包括来自任何嵌套对象的所有值,就像上面的例子一样..
"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 会显示错误字符串缺少company 对象中的值。关于如何设置递归,我一定很简单。感谢您的任何建议!
【问题讨论】:
标签: javascript arrays recursion iteration