循环通过表来存储单元格的位置

时间:2013-07-15 16:30:58

标签: javascript for-loop pgm

我有一个关于循环数据表而不是将数据存储在表中的问题;相反,我想在表格中存储某个数据的位置。

我现在正在使用的是一个pgm像素值表,它被定义为黑色数字0和白色255。我希望用这个表循环然后循环它并将该像素的位置,行和列号存储在一个数组中,但前提是该像素显示的值为255.

我目前没有pgm表,所以我将以此为例。 为了简单起见,请你帮我只记录显示值为15的像素的位置吗?非常感谢所有答案:)

P2
# feep.pgm
24 7
15
0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
0  3  3  3  3  0  0  7  7  7  7  0  0 11 11 11 11  0  0 15 15 15 15  0
0  3  0  0  0  0  0  7  0  0  0  0  0 11  0  0  0  0  0 15  0  0 15  0
0  3  3  3  0  0  0  7  7  7  0  0  0 11 11 11  0  0  0 15 15 15 15  0
0  3  0  0  0  0  0  7  0  0  0  0  0 11  0  0  0  0  0 15  0  0  0  0
0  3  0  0  0  0  0  7  7  7  7  0  0 11 11 11 11  0  0 15  0  0  0  0
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 个答案:

答案 0 :(得分:1)

您可以这样做:

var locs = [],
    row,
    col,
    pixelData = ...,
    nRows = ...,
    nCols = ...;
for (row = 0; row < nRows; ++row) {
    for (col = 0; col < nCols; ++col) {
        if (pixelData[row][col] == 15) {
            locs.push([row, col]);
        }
    }
}
// now the locs array has all [row,col] locations of pixels with value 15

在上面,pixelData将是一个行数组,每个行都是一个像素值数组:

var pixelData = [
    [0,  0,  0,  0,  0,  0,  0,  0,  0,  . . .],
    [0,  3,  3,  3,  3,  0,  0,  7,  7,  . . .],
    . . .
];

最后,您应该期望locs是一个双元素数组的数组,就像它用以下内容初始化一样:

var locs = [
    [1, 19], [1,20], [1,21], [1,22], [2, 19], [2,22], ...
];