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