[英]Javascript Recursion with helper function
我有这段代码,我想把它打印出来。
a
|->b
|->c
|->e
当我使用let spaceStr = " ".repeat(level) + "|->";
但不是当我使用助手 function getSpace
。 它只打印以下内容:
a
|->b
我不知道为什么。 有人可以向我解释吗?
const obj = { name: 'a', children: [ { name: 'b', children: [] }, { name: 'c', children: [ { name: 'e', children: [] } ] } ] } function getSpace(level){ var str = ''; for (i=0; i < level; i++){ str += ' '; } str += '|->'; return str } function getPath(obj, level) { let result = []; let resultString = ''; let spaceStr = " ".repeat(level) + "|->"; // let spaceStr = getSpace(level); if (obj.children.length === 0) { return spaceStr+obj.name; } else { if (level === 0) { result.push(obj.name); } else { result.push(spaceStr + obj.name); } for (i=0;i<obj.children.length;i++){ result.push(getPath(obj.children[i], level+1)); } } return result; } function printPath(result){ for (i=0;i<result.length;i++){ console.log(result[i]); } return } printPath(getPath(obj,0).flat());
通过在循环中使用i=0
,您没有将变量i
正确地限定在循环中。 相反,它将冒泡到该变量名称的最近实例(直到它到达全局范围)。 考虑在循环中使用let i = 0
来正确地 scope 变量。 请参阅以下功能代码:
const obj = { "name": "a", "children": [{ "name": "b", "children": [] }, { "name": "c", "children": [{ "name": "e", "children": [] }] } ] } function getSpace(level){ var str = ''; for (let i = 0; i < level; i++){ str += ' '; } str += '|->'; return str } function getPath(obj, level) { let result = []; let resultString = ''; //let spaceStr = " ".repeat(level) + "|->"; let spaceStr = getSpace(level); if (obj.children.length === 0) { return spaceStr+obj.name; } else { if (level === 0) { result.push(obj.name); } else { result.push(spaceStr + obj.name); } for (let i = 0;i<obj.children.length;i++){ result.push(getPath(obj.children[i], level+1)); } } return result; } function printPath(result){ for (let i = 0;i<result.length;i++){ console.log(result[i]); } return } printPath(getPath(obj,0).flat());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.