我有一个由0和1组成的二维数组。 我需要'裁剪'数组,因此没有行/列只有0。
这就是我创建数组的方式。
var image = [];
for (y = 0; y < height; y++)
{
image[y] = [];
}
答案 0 :(得分:0)
首先,您应该通过检测数组是否充满零来清理行。
您可以使用Array.prototype.every
。
示例:
此函数返回的数组是否为空。
function isEmpty(arr){
return arr.every(function(item){
返回项目=== 0;
});
}
你可以编写一个算法来检测0中的每一行,直到你有一条非空行。你从数组的末尾做同样的事情。
清理行后,你会对cols执行相同的操作,并使用相同的算法,使用一个函数将每个cols作为数组。
这是完成工作的完整示例:
var arr = [
[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0],
[0,0,1,1,1,0,0,0,0],
[0,0,1,0,1,0,0,0,0],
[0,0,0,0,0,0,0,0,0],
[0,0,1,1,1,0,0,1,0],
[0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0]
];
function cleanRows(arr) {
var i=0;
var j=arr.length-1;
while(i<arr.length && isEmpty(arr[i])) {
i++;
}
while(j>i && isEmpty(arr[j])) {
j--;
}
return arr.slice(i,j+1);
}
function cleanCols(arr) {
var i= 0, j=arr[0].length-1;
while(i<j && isEmpty(getCol(arr,i))) {
i++;
}
while(j>i && isEmpty(getCol(arr,j))) {
j--;
}
j++;
// clear each line
return arr.map(function(row) {
return row.slice(i,j);
})
}
function getCol(arr,colIndex) {
return arr.map(function(item) {
return item[colIndex];
});
}
function isEmpty(arr) {
return arr.every(function(item) {
return item===0;
});
}
var newArr = cleanRows(arr);
newArr = cleanCols(newArr);
console.log(newArr);