Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript变量在array.filter操作期间丢失值 可能与谁有关_Javascript_Arrays - Fatal编程技术网

Javascript变量在array.filter操作期间丢失值 可能与谁有关

Javascript变量在array.filter操作期间丢失值 可能与谁有关,javascript,arrays,Javascript,Arrays,这篇文章实际上是一种XY问题的例子 寻求帮助的人的真正问题(“X”)是模糊的,因为他们不是直接询问X问题,而是询问如何解决他们认为可以解决X问题的次要问题(“Y”) 我最初的问题是数组(图中第127行)变空了。当我追踪这个问题时,我震惊地发现变量在执行过程中变得空洞。即使这就是这篇文章的内容,如果我一直在想,我也不需要发表 真正的问题是什么?请看图片中的第131行 if (siblings[childitem].my.parents.length = 0) { 单个相等值将生成一个空数组 原来

这篇文章实际上是一种XY问题的例子

寻求帮助的人的真正问题(“X”)是模糊的,因为他们不是直接询问X问题,而是询问如何解决他们认为可以解决X问题的次要问题(“Y”)

我最初的问题是数组(图中第127行)变空了。当我追踪这个问题时,我震惊地发现变量在执行过程中变得空洞。即使这就是这篇文章的内容,如果我一直在想,我也不需要发表

真正的问题是什么?请看图片中的第131行

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以了解实际解决方案。谢谢你的回复。