在 2D Javascript 数组中搜索值索引

Searching a 2D Javascript Array For Value Index

本文关键字:搜索 索引 数组 2D Javascript      更新时间:2023-09-26

我正在尝试编写一个jQuery,它将在7x7 2D数组中找到特定值的索引。

因此,如果我正在寻找的值是 0,那么我需要函数来搜索 2D 数组,一旦找到 0,它就会存储两个索引的索引。

这就是我到目前为止所拥有的,但它返回"0 0"(设置为变量的初始值。

这是一个jsFiddle和我到目前为止拥有的功能:

http://jsfiddle.net/31pj8ydz/1/

$(document).ready( function() {
    var items = [[1,2,3,4,5,6,7], 
                 [1,2,3,4,5,6,7], 
                 [1,2,3,0,5,6,7], 
                 [1,2,3,4,5,6,7], 
                 [1,2,3,4,5,6,7], 
                 [1,2,3,4,5,6,7], 
                 [1,2,3,4,5,6,7]];
    var row = 0;
    var line = 0;
    for (i = 0; i < 7; ++i) {
        for (j = 0; i < 7; ++i) {
            if (items[i, j] == '0,') {
                row = i;
                line = j;
            }
        }
    }
    $('.text').text(row + ' ' + line);
});

.HTML:

<p class="text"></p>

您的if语句正在比较

if (items[i, j] == '0,')

访问是错误的,您应该使用 [i][j] .

并且您的数组具有以下值:

[1,2,3,4,5,6,7]
....

您的值'0,'是一个字符串,它不会与数组中的数值匹配,这意味着您的行和行不会更改。

首先,您访问数组错误。要访问 2D 数组,请使用格式items[i][j]

其次,数组不包含值 '0' 。它不包含任何字符串。因此,row变量和line变量永远不会改变。

您应该将 if 语句更改为如下所示:

if(items[i][j] == 0) {

请注意,它搜索的是数字 0,而不是字符串"0"。

您以错误的方式访问数组。请尝试这个:

items[i][j]

当我们有一个多维数组时,我们使用 array[firstDimensionIndex][secondDimensionIndex]...[nthDimensionIndex] .

话虽如此,您应该更改 if 语句中的条件:

 if( items[i][j] === 0 )

请注意,我已经删除了您在 0 之后的,。不需要。我也删除了''.我们也不需要它们。

代码中存在以下问题

1)items[i,j]应该是items[i][j]

2)如果您不关心类型,您正在将其与'0,'应该0'0'进行比较。

3)在你的内部for循环中,你应该递增j并测试j作为退出条件。

像波纹管一样改变你的for循环,它会起作用

for (i = 0; i < 7; i++) {
        for (j = 0; j < 7; j++) {
            if (items[i][j] == '0') {
                row = i;
                line = j;
            }
        }
    }

演示

注意:-

1)最好在==的地方使用===,它也检查类型。正如你所看到的0=='0'给出的是真的。

2)最好说i < items.lengthj<items[i].length,而不是硬编码为7。

var foo;
items.forEach(function(arr, i) {
    arr.forEach(function(val, j) {
        if (!val) { //0 coerces to false
            foo = [i, j];
        }
    }
}

这里 foo 将是 2D 数组中 0 的最后一个实例。

你做错了循环代替

 for (i = 0; i < 7; ++i) {
        for (j = 0; i < 7; ++i) {
            if (items[i, j] == '0,') {
                row = i;
                line = j;
            }
        }
    }

使用这个

 for (i = 0; i < 7; i++) {
        for (j = 0; j < 7; j++) {
            if (items[i][j] == 0) {
                row = i;
                line = j;
            }
        }
    }

这是演示

看起来你还在学习如何编程。但这是我制作的算法。分析它并与您的代码;)进行比较

var itens = [[1,2,3,4,5,6,7], 
             [1,2,3,4,5,6,7], 
             [1,2,3,0,5,6,7], 
             [1,2,3,4,5,6,7], 
             [1,2,3,4,5,6,7], 
             [1,2,3,4,5,6,7], 
             [1,2,3,4,5,6,7]];
var row = null;
var collumn = null;
for (var i = 0; i < itens.length; i++) {
    for (var j = 0; j < itens[i].length; j++) {
        if (itens[i][j] == 0) {
            row = i;
            collumn = j;
        }
    }
}
console.log(row, collumn);