繁体   English   中英

Javascript 递归与帮助器 function

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM