函数 returns [object Set] 而不是实际的 Set
Function returns [object Set] instead of an actual Set
我有一个功能
function recursiveDivisionWrap(width, height, colStart, colEnd, rowStart, rowEnd)
其中我有一个空集
let blockedNodes = new Set();
在这个函数中我有另一个递归函数
function recursiveDivision(width, height, colStart, colEnd, rowStart, rowEnd)
每次调用 recursiveDivision 函数时,我都会通过添加值来更新 blockedNodes 集:
for (let i = colStart; i < colEnd; i++) {
blockedNodes.add(`c${i}r${wallStart}`);
}
如果我 console.log blockedNodes 在 recursiveDivision 函数中设置,我' m 得到想要的结果,例如:
Set(43) {'c0r7', 'c1r7', 'c2r7', 'c3r7', 'c4r7', …}
然而,当我 console.log blockedNodes 设置在 recursiveDivisionWrap 而不是recursiveDivision,我将得到逗号分隔的对象:
c0r7,c1r7,c2r7,c3r7,c4r7,c5r7,c6r7,c7r7,c8r7,c9r7,c9r0,c9r1,c9r2,c9r3,c9r4,c9r5,c9r6,c8r0,c8r1,c8r2,c8r3,c8r4,c8r5,c8r6,c3r0,c3r1,c3r2,c3r3,c3r4,c3r5,c3r6,c4r6,c5r6,c6r6,c7r6,c4r1,c5r1,c6r1,c7r1,c4r5,c5r5,c6r5,c7r5
我也试过数组,结果是一样的。
为什么 return Set(43) {'c0r7', 'c1r7', 'c2r7', 'c3r7', 'c4r7', …}
如果 blockedNodes 集是在 recursiveDivision 函数和内部 recursiveDivisionWrap 为什么内部 recursiveDivision 函数 return 设置正确?
如果能帮助我找到该问题的答案,我将不胜感激。
此行为与生成输出的位置无关,而与输出的格式有关。
您有这些陈述:
console.log(blockedNodes);
并且:
console.log(`Is this a set? ${blockedNodes}`);
并且:
let ecie = Array.from(blockedNodes);
console.log(`Is this an array? ${ecie}`)
他们不做同样的事情。
console.log(blockedNodes)
将渲染留给 console
API,这可能会提供额外的信息,例如对象构造函数的名称(在本例中为 Set
), 这个集合的物品数量, ...等等.它甚至可以将用户界面控件添加到 expand/collapse 集合的内容和潜在的嵌套数据结构。
console.log(`Is this a set? ${blockedNodes}`)
将隐式调用 blockedNodes.toString()
以生成字符串。除非 toString
已被覆盖,否则将呈现为 [object Set]
,因此总输出将是“这是一个集合吗?[object Set]”。
console.log(`Is this an array? ${ecie}`)
也会调用 toString
方法,但这次是在 ecie
上,它是一个数组(因为那是 Array.from
返回的)。数组上的 toString
方法生成逗号分隔的值列表,这解释了您提到的输出。
我有一个功能
function recursiveDivisionWrap(width, height, colStart, colEnd, rowStart, rowEnd)
其中我有一个空集
let blockedNodes = new Set();
在这个函数中我有另一个递归函数
function recursiveDivision(width, height, colStart, colEnd, rowStart, rowEnd)
每次调用 recursiveDivision 函数时,我都会通过添加值来更新 blockedNodes 集:
for (let i = colStart; i < colEnd; i++) {
blockedNodes.add(`c${i}r${wallStart}`);
}
如果我 console.log blockedNodes 在 recursiveDivision 函数中设置,我' m 得到想要的结果,例如:
Set(43) {'c0r7', 'c1r7', 'c2r7', 'c3r7', 'c4r7', …}
然而,当我 console.log blockedNodes 设置在 recursiveDivisionWrap 而不是recursiveDivision,我将得到逗号分隔的对象:
c0r7,c1r7,c2r7,c3r7,c4r7,c5r7,c6r7,c7r7,c8r7,c9r7,c9r0,c9r1,c9r2,c9r3,c9r4,c9r5,c9r6,c8r0,c8r1,c8r2,c8r3,c8r4,c8r5,c8r6,c3r0,c3r1,c3r2,c3r3,c3r4,c3r5,c3r6,c4r6,c5r6,c6r6,c7r6,c4r1,c5r1,c6r1,c7r1,c4r5,c5r5,c6r5,c7r5
我也试过数组,结果是一样的。
为什么 return Set(43) {'c0r7', 'c1r7', 'c2r7', 'c3r7', 'c4r7', …}
如果 blockedNodes 集是在 recursiveDivision 函数和内部 recursiveDivisionWrap 为什么内部 recursiveDivision 函数 return 设置正确?
如果能帮助我找到该问题的答案,我将不胜感激。
此行为与生成输出的位置无关,而与输出的格式有关。
您有这些陈述:
console.log(blockedNodes);
并且:
console.log(`Is this a set? ${blockedNodes}`);
并且:
let ecie = Array.from(blockedNodes);
console.log(`Is this an array? ${ecie}`)
他们不做同样的事情。
console.log(blockedNodes)
将渲染留给 console
API,这可能会提供额外的信息,例如对象构造函数的名称(在本例中为 Set
), 这个集合的物品数量, ...等等.它甚至可以将用户界面控件添加到 expand/collapse 集合的内容和潜在的嵌套数据结构。
console.log(`Is this a set? ${blockedNodes}`)
将隐式调用 blockedNodes.toString()
以生成字符串。除非 toString
已被覆盖,否则将呈现为 [object Set]
,因此总输出将是“这是一个集合吗?[object Set]”。
console.log(`Is this an array? ${ecie}`)
也会调用 toString
方法,但这次是在 ecie
上,它是一个数组(因为那是 Array.from
返回的)。数组上的 toString
方法生成逗号分隔的值列表,这解释了您提到的输出。