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 寻找未定义值的正确方法是什么_Javascript_Arrays - Fatal编程技术网

Javascript 寻找未定义值的正确方法是什么

Javascript 寻找未定义值的正确方法是什么,javascript,arrays,Javascript,Arrays,我有以下代码: if (array.indexOf("undefined")===-1){ do something... } 我的初始阵列是: 数组=[,,,,,] 当程序运行时,它会被值填充,但我希望函数在没有未定义的空格时停止。但上面的语法不正确。任何人都可以告诉我原因。您的代码查找字符串“undefined”。您希望查找包含未定义值的第一个索引。最好的方法是使用findIndex: for(var ind in array) { if(array[ind] === und

我有以下代码:

if (array.indexOf("undefined")===-1){
    do something...
  }
我的初始阵列是:

数组=[,,,,,]


当程序运行时,它会被值填充,但我希望函数在没有未定义的空格时停止。但上面的语法不正确。任何人都可以告诉我原因。

您的代码查找字符串“undefined”。您希望查找包含
未定义值的第一个索引。最好的方法是使用
findIndex

for(var ind in array) {
 if(array[ind] === undefined) {
   doSomething();
 }
}
if(array.findIndex(x=>x===undefined) !== -1) {
  //do something
}

代码查找字符串“undefined”。您希望查找包含
未定义值的第一个索引。最好的方法是使用
findIndex

if(array.findIndex(x=>x===undefined) !== -1) {
  //do something
}

您的检查无效,因为您传递的是字符串
“undefined”
,而不是值本身。另外,
.indexOf()
设计用于显式忽略阵列中的孔

使用迭代来检测阵列中的漏洞似乎是浪费。相反,您可以使用计数器跟踪已填充的孔数,并在计数器与长度匹配时执行代码

无论哪种方法,在特定索引处检测孔的正确方法是使用
in
操作符

下面是一个基于类的重用解决方案:

class SpacesArray扩展数组{
构造函数(n,回调){
超级(n);
this.callback=回调;
这个计数器=0;
}
填充孔(n,val){
如果(!(本节中的n)){
这个.counter++;
控制台日志(“填充孔”,n);
}
这个[n]=val;
if(this.counter==this.length){
这是callback();
}
}
}
//用法
var sa=new SpacesArray(10,函数(){
log(“完成!”+这个);
});
//模拟每个孔的延迟随机填充。
for(设i=0;isa.fillHole(i,i),ms);

}
您的检查无效,因为您传递的是字符串
“undefined”
而不是值本身。另外,
.indexOf()
设计用于显式忽略阵列中的孔

使用迭代来检测阵列中的漏洞似乎是浪费。相反,您可以使用计数器跟踪已填充的孔数,并在计数器与长度匹配时执行代码

无论哪种方法,在特定索引处检测孔的正确方法是使用
in
操作符

下面是一个基于类的重用解决方案:

class SpacesArray扩展数组{
构造函数(n,回调){
超级(n);
this.callback=回调;
这个计数器=0;
}
填充孔(n,val){
如果(!(本节中的n)){
这个.counter++;
控制台日志(“填充孔”,n);
}
这个[n]=val;
if(this.counter==this.length){
这是callback();
}
}
}
//用法
var sa=new SpacesArray(10,函数(){
log(“完成!”+这个);
});
//模拟每个孔的延迟随机填充。
for(设i=0;isa.fillHole(i,i),ms);

}
需要更多信息。你知道最后要填充的空间数吗?它们是按顺序填写的吗?成员定义的空格实际值是
未定义的
,还是仅仅是数组中的一个孔?该测试查找字符串
“未定义的”
数组.findIndex(函数(x){return x==undefined})
似乎有效当您检查您的条件时,您如何处理数组?这是初始数组var spacesArray=[,,,];。它们随机填充两个不同的值。填充后,数组将赋值为win,并将数组重置为其初始状态。需要更多信息。你知道最后要填充的空间数吗?它们是按顺序填写的吗?成员定义的空格实际值是
未定义的
,还是仅仅是数组中的一个孔?该测试查找字符串
“未定义的”
数组.findIndex(函数(x){return x==undefined})
似乎有效当您检查您的条件时,您如何处理数组?这是初始数组var spacesArray=[,,,];。它们随机填充两个不同的值。填充后,数组将赋值为win并将数组重置为其初始状态这解决了问题,尽管我对箭头函数还不是很熟悉。所以基本上没有办法用indexOf来寻找一个未定义的值?(实际上我寻找==-1)您可以用
函数(x){return x===undefined;}
替换arrow函数。无法使用
indexOf
搜索
undefined
。您当然可以使用
.indexOf
搜索
undefined
。在稀疏数组中找不到孔,因为
.indexOf
会忽略它们。@Kostis:Using
.findIndex()
或查找
未定义的
值时,如果数组中实际包含
未定义的
值,则会出现误报。这解决了问题,尽管我对箭头函数还不是很熟悉。所以基本上没有办法用indexOf来寻找一个未定义的值?(实际上我寻找==-1)您可以用
函数(x){return x===undefined;}
替换arrow函数。无法使用
indexOf
搜索
undefined
。您当然可以使用
.indexOf
搜索
undefined
。在稀疏数组中找不到漏洞,因为
.indexOf
会忽略它们。@Kostis:如果
未定义的
值实际包含在数组中,则使用
.findIndex()
或查找
未定义的
值将导致误报。