recursiveDivisionWrap函数内Set外层打印为逗号分隔字符串问题
问题原因
你遇到的现象基本是隐式类型转换导致的:
- 内层递归中你是直接将Set/Array对象传给
console.log,控制台会识别引用类型,输出结构化的对象内容 - 外层打印时你大概率将
blockedNodes和字符串做了+拼接操作(例如写法为console.log("阻塞节点:" + blockedNodes)),此时JS会自动调用blockedNodes.toString()完成类型转换,而Set和Array的toString()方法默认都会把所有元素用逗号拼接成纯字符串,和你看到的输出完全吻合。
还有极低概率是打印时机错误:如果你的递归逻辑中包含异步操作,你在递归还未执行完成时就提前在外层打印,但这种情况输出的元素会缺失,和你描述的输出了全部元素的情况不符,基本可以排除。
解决方案
- 调整打印写法,不要把引用类型和字符串用
+拼接,改为逗号分隔参数传给console.log即可保留对象结构:
错误写法:console.log("阻塞节点列表:" + blockedNodes)
正确写法:console.log("阻塞节点列表:", blockedNodes) - 如果需要主动获取结构化的可遍历内容,把Set转成数组即可:
const blockedList = Array.from(blockedNodes) - 若递归包含异步逻辑,通过回调、Promise等方式保证递归完全执行完成后,再读取和打印
blockedNodes。 - 如果调整打印写法后问题仍存在,排查代码中是否存在对
blockedNodes的意外赋值,导致它被覆盖为字符串类型。
内容的提问来源于stack exchange,提问作者cikcirikcik
相关产品推荐
相关产品推荐

