Поиск в двумерном массиве - PullRequest
2 голосов
/ 21 февраля 2011

Я знаю, что упускаю что-то очевидное, но я не могу найти свою ошибку.Я хочу видеть, находится ли массив в другом двухмерном массиве.Вот мой код:

var cell = [0, 0];
var population = [[0, 0], [1, 1]];

if (cell == population[0]) {
    alert("Cell found within population");
}
else if ([0, 0] == population[0]) {
    alert("Array found within population");
}
else {
    alert("Neither found within population");
}

Я использовал второе условие только для того, чтобы убедиться, что значение ячейки и совокупности [0] не было эквивалентным.Но, как оказалось, ни один из них не совпадает.Я проверил (ячейка [0] == население [0] [0]), и это похоже на работу.

Буду признателен за любые разъяснения.Спасибо!

Ответы [ 4 ]

3 голосов
/ 21 февраля 2011

Проблема здесь в том, что оператор == для массивов в javascript сравнивает адреса памяти, а не фактические значения.Вот почему вы заметили, что (cell [0] == Population [0] [0]) возвращает true (вы сравниваете значения).

Вам нужно пройтись по элементам в массивах, чтобы сравнить их.Вот пример того, что я имею в виду.

function checkEquivalence(arr1, arr2){
    if(arr1.length != arr2.length) 
        return false;     
    for (i = 0; i < arr2.length; i++)
    {
        if(arr1[i] != arr2[i])
           return false;
    }
    return true;
}

Теперь вы можете запустить операцию checkEquivalence( cell, population[0] );

0 голосов
/ 22 февраля 2011

Если ваши сравнения всегда будут такими простыми, хакерский обходной путь будет:

if(cell.valueOf() == population[0].valueOf())  {
    ...
}

Выше будет эффективно сравнить две строки, изменив логику на:

if('0,0' == '0,0') {
    ...
}

Определенно не рекомендую лучшие практики от тех, с кем я работаю, но это полезно в крайне контролируемых ситуациях.

0 голосов
/ 22 февраля 2011

Возможно, вам нужно какое-то глубокое сравнение на равенство, чтобы увидеть, равны ли два объекта (включая массивы) по значению.Взгляните на Сравнение объектов в JavaScript , или Google для глубокого равенства Javascript.

0 голосов
/ 21 февраля 2011

К сожалению, вы не можете сравнивать массивы напрямую, вы должны сравнивать их поэлементно, как это:

function compareArrays(arrayOne, arrayTwo) {
    if (arrayOne.length != arrayTwo.length) {
        return false;
    }
    for (var i = 0; i < arrayOne.length; ++i) {
        if (arrayOne[i] != arrayTwo[i]) { 
             return false;
        }
    }
    return true;
}

Теперь вы можете использовать:

compareArrays([0, 0], population[0])

... что даст истину.

...