我在使用以下代码首先递归遍历"对象"对象时使用 return 关键字,但它只通过多次循环导致 king 属性的对象,当它到达 sika 属性和值时,它结束循环。
let object = {king: {lisa: {biza: {sika: 21}}}, queen:{billy: {silly: 23}}, guard: {son: 4}};
function goThrough(obj) {
let list = Object.keys(obj);
for(let keys of list) {
console.log("property: " + keys + ", value: " + JSON.stringify(obj[keys]));
goThrough(obj[keys]); //Note: using return keyword here results in only king's values looped over
}
}
goThrough(object);
但是当我省略 return 时,它会循环遍历其余对象及其属性值对。有人可以解释为什么在使用返回时它只以第一个对象值结尾吗?
为了更容易理解 in 循环递归,请在循环内goThrough()
之后放置一个返回。
let object = {king: {lisa: {biza: {sika: 21}}}, queen:{billy: {silly: 23}}, guard: {son: 4}};
function goThrough(obj) {
let list = Object.keys(obj);
for(let keys of list) {
console.log("property: " + keys + ", value: " + obj[keys]);
goThrough(obj[keys]);
return;
}
}
console.log(goThrough(object))
当使用如上所示的 return 时,一旦代码从递归返回,它将立即停止函数执行,并且不会通过其他属性 queen 和 guard。您可以通过使用 return 明确禁止这样做。
如果省略返回,则在第一个分支完成king: {lisa: {biza: {sika: 21}}}
之后,代码将继续使用其他属性并尽可能深入。同样的事情发生在第一个财产国王身上,它下降到它的所有孩子(tnx递归(。
为了更多地了解它。将断点放在代码中并观察堆栈调用,填充函数并从中返回。您也可以在goThrough()
和return
之间放置一个控制台并分析输出。
当您将 return 语句放入循环中时,该循环仅对key
的一个值执行(在本例中为"king"
(。然后,它从函数中返回,因此不会触及其他键。希望这对:)有所帮助
需要[object object]
转换为字符串以提高可见性,这是代码
let object = {king: {lisa: {biza: {sika: 21}}}, queen:{billy: {silly: 23}}, guard: {son: 4}};
function goThrough(obj) {
let list = Object.keys(obj);
for(let keys of list) {
console.log("property: " + keys + ", value: " + JSON.stringify(obj[keys]));
goThrough(obj[keys]);
}
}
goThrough(object);