Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.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

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,我使用一个数字数组,每个数字都代表一种颜色,除了数字0。正如你在我的代码中看到的,我画了一个矩形数组,用数字0清除了矩形,它变成了一个空的地方。如何知道数组是否为空?如果数组中仍然有零,这怎么可能是空数组 var canvas=document.getElementById(“mijnCanvas”); var mijnObject=canvas.getContext(“2d”); 函数tekenenObjecten(){ makenMuur(); } 设定间隔(tekenenObjecten

我使用一个数字数组,每个数字都代表一种颜色,除了数字0。正如你在我的代码中看到的,我画了一个矩形数组,用数字0清除了矩形,它变成了一个空的地方。如何知道数组是否为空?如果数组中仍然有零,这怎么可能是空数组

var canvas=document.getElementById(“mijnCanvas”);
var mijnObject=canvas.getContext(“2d”);
函数tekenenObjecten(){
makenMuur();
}
设定间隔(tekenenObjecten,20);
var stenenPerRij=27;
var steenHoogte=20;
var steenBreedte=canvas.width/stenenPerRij;
var stenen=[
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,1,1,1,1,1,1,1,1,1,1,1,6,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
[0,1,2,2,2,2,2,2,7,2,2,2,2,2,2,2,2,2,2,7,2,2,2,2,2,1,0],
[0,1,1,6,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,6,1,1,1,1,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,1,3,0,0,2,2,2,2,0,0,0,0,0,0,1,0,2,2,2,2,0,1,0,0,0,1],
[1,0,0,1,0,2,0,0,0,2,0,0,0,0,0,1,0,2,0,0,0,0,1,3,0,0,1],
[1,1,1,1,0,2,2,2,2,0,0,0,0,0,0,1,0,4,2,2,0,0,1,0,1,0,1],
[1,0,0,1,0,2,0,2,0,0,0,1,0,0,0,1,0,2,0,0,0,0,1,0,0,1,1],
[1,0,0,1,0,2,0,0,2,2,0,0,1,1,1,0,0,2,2,2,2,0,1,0,0,0,1],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,1,1,1,1,1,1,1,6,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
[0,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,7,2,2,2,2,2,2,2,2,1,0],
[0,1,1,1,1,1,1,1,1,6,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
];
函数makenMuur(){
对于(变量i=0;i

您可以编写一个函数来检查数组中任何位置的非零值

function isEmpty(arr) {
  for (var i = 0; i < arr.length; i++) {
    for (var j = 0; j < arr[i].length; j++) {
      if (arr[i][j] !== 0) {
        return false;
      }
    }
  }
  return true;
}
函数为空(arr){
对于(变量i=0;i
或者是缓存数组长度的更快版本

function isEmpty(arr) {
  for (var i = 0, len = arr.length; i < len; i++) {
    var subArr = arr[i];
    for (var j = 0, len2 = subArr.length; j < len2; j++) {
      if (subArr[j] !== 0) {
        return false;
      }
    }
  }
  return true;
}
函数为空(arr){
对于(变量i=0,len=arr.length;i
用于迭代数组,将所有数字相加,然后返回。(具体操作方法请参见文档)。如果
为0,则数组为空

let sum = stenen.reduce((x,y) => x+y); //sums up (using an arrow function) the array 
if (!stenen) // the sum is 0 and it's "empty"
注:这是ES6代码。这将(从单行隐含回报)转换为:

使用可以检查所有行中的所有列是否为0。这个解决方案的好处是,如果第一行的第一列上没有0,它将返回false,而不检查数组的其余部分

var isEmpty = stenen.every(function(row){ // does every row have all 0 in its columns?
    return row.every(function(col){ // do all columns in a row have all 0?
        return col == 0
    })
})
正如@DonovanM所指出的,使用ES6,您只需执行以下操作:

let isEmpty = stenen.every(row => row.every(col => col === 0))

在循环遍历每个数组时,可以使用过滤器检查长度是否大于0:

function check(matrix) {
  for (var i = 0; i < matrix.length; i++) {
    var len = matrix[i].filter(function(el) {
      return el > 0;
    }).length;
    if (len) {
      return false;
    }
  }
  return true;
}
功能检查(矩阵){
对于(变量i=0;i0;
}).长度;
如果(len){
返回false;
}
}
返回true;
}

你的意思是,这里“空”的等价物是填满所有0的巨大数组吗?@SterlingArcher是的,我制作了游戏BrickBreaker,这些矩形是砖块,数字填充了一种颜色,数字0除外,它被清除了。球接触彩色砖块,但不接触颜色零。。。但是如何知道数组是否为空呢?如果您只是指单个内部数组,那么
!arr.some(Boolean)
可以。如果您是指外部数组中的所有数组,那么
!outerArray.some(函数(arr){return!arr.some(布尔)})
,或使用ES6箭头函数:
!outerArray.some(arr=>!arr.some(Boolean))
漂亮干净。我明白了。我想你遗漏了什么:)第二个
isEmpty
是一个无限循环,带有
for(var I=0,len=arr.length;I++)
@DonovanM你说得对!谢谢你的帮助。已修复。ES6中的上述内容将是
让isEmpty=stenen.every(row=>row.every(col=>col==0))
@DonovanM非常感谢。这是一个很好的使用方法。
function check(matrix) {
  for (var i = 0; i < matrix.length; i++) {
    var len = matrix[i].filter(function(el) {
      return el > 0;
    }).length;
    if (len) {
      return false;
    }
  }
  return true;
}