Javascript变量在array.filter操作期间丢失值 可能与谁有关
这篇文章实际上是一种XY问题的例子 寻求帮助的人的真正问题(“X”)是模糊的,因为他们不是直接询问X问题,而是询问如何解决他们认为可以解决X问题的次要问题(“Y”) 我最初的问题是数组(图中第127行)变空了。当我追踪这个问题时,我震惊地发现变量在执行过程中变得空洞。即使这就是这篇文章的内容,如果我一直在想,我也不需要发表 真正的问题是什么?请看图片中的第131行Javascript变量在array.filter操作期间丢失值 可能与谁有关,javascript,arrays,Javascript,Arrays,这篇文章实际上是一种XY问题的例子 寻求帮助的人的真正问题(“X”)是模糊的,因为他们不是直接询问X问题,而是询问如何解决他们认为可以解决X问题的次要问题(“Y”) 我最初的问题是数组(图中第127行)变空了。当我追踪这个问题时,我震惊地发现变量在执行过程中变得空洞。即使这就是这篇文章的内容,如果我一直在想,我也不需要发表 真正的问题是什么?请看图片中的第131行 if (siblings[childitem].my.parents.length = 0) { 单个相等值将生成一个空数组 原来
if (siblings[childitem].my.parents.length = 0) {
单个相等值将生成一个空数组
原来的问题如下
我通过chrome开发工具发现了这一点 这是之前的照片 您可以在本地范围内看到所有相关信息,并且它会在与实时代码内联的黄色文本中得到响应。所有值都是适当的 在执行中的下一步时 您可以在实时代码中看到十字线/光标已向右移动。以前的局部变量已经消失
老父母
现在是[]
,孩子
是未定义的
不知怎的,这是一个参考问题吗?我从中获得了过滤器语法
到底发生了什么事
以下是文本代码,供需要它的人使用
selected.my.children.forEach (childitem => {
// let parentindex = siblings[child].my.parents.indexOf(selected.my.place);
let oldparents = siblings[childitem].my.parents;
let newparents = oldparents.filter(e => {e != selected.my.place});
siblings[childitem].my.parents = newparents;
// if (parentindex > -1) {
// siblings[child].my.parents.splice(parentindex, 1)
// }
if (siblings[childitem].my.parents.length = 0) {
siblings[childitem].faceup();
}
console.log(siblings[childitem].my);
});
ElementList是数组而不是数组,不能直接使用过滤器,需要先将其转换为数组:
let oldparents = [...siblings[childitem].my.parents];// or you can use Array.from
let newparents = oldparents.filter(e => e != selected.my.place); // here the arrow function also needs to be updated, remove the braces
因为您进入了一个新的功能范围。这是传递给筛选函数的回调:
e => {e != selected.my.place} // <- this is a new scope, no local variables other than `e`
e=>{e!=selected.my.place}//发布代码,而不是代码的图像。呃,它们不在本地范围内,因为您在回调的范围内。你确定他们“迷路”了吗?因为它们似乎根本没有显示在那里,但仍然应该有价值。您可以尝试通过进入回调,然后在控制台中键入console.log(childitem)
来验证这一点-这将在当前上下文中执行,因此您将获得childitem
的值(如果有)。另请注意,如果您的.filter
不起作用,我不会感到惊讶-您有一个箭头函数,它的主体中有{}
,因此它没有隐式返回。@vlaz右侧列表中的“Scope>Local”是否表示它们在本地范围内?在第二张图片中,右边的输出显示了删除的值。我在暂停期间完成了console.log,它显示了相同的内容。此外,我还添加了{}
作为故障排除步骤,但这种效果是事后产生的。不管怎样,变量都在丢失它们的值,并且如果没有{}
,筛选器最初无法工作。(无论如何,我会把它改回来,因为这是有意义的)是否有助于澄清有关范围的问题?我认为这与实际问题没有任何关系。有趣的是。我真的知道。我被“阵列正在被清除”迷住了,以至于我认为它也被清除了。检查op以了解实际解决方案。谢谢你的回复。