проверка наличия массива в многомерном массиве (pref-jQuery) - PullRequest
3 голосов
/ 20 декабря 2010

У меня есть многомерный массив, и я пытаюсь проверить, содержит ли он другой массив.Сейчас я использую функцию jQuery.inArray (я пробовал Array.prototype, но продолжал получать ошибки, никогда раньше не использовал его).

Я пытаюсь убедиться, что мой родительский массив не добавляет один и тот же дочерний массив дважды

if(jQuery.inArray(new Array(step[0],step[1],r2),unavailArray)==-1){
    alert(jQuery.inArray(new Array(step[0],step[1],r2),unavailArray));

    unavailArray.push(new Array(step[0],step[1],r2));
  }

Я также пытался

jQuery.inArray("[step[0],step[1],r2]",unavailArray)==-1

и

jQuery.inArray([step[0],step[1],r2],unavailArray)==-1

они все возвращают -1, и когда я смотрю на массив, у меня есть

[[630,690,09],[3180,3220,2],[3180,3220,2]]

, поэтому ясно, что что-то не работает.

1 Ответ

3 голосов
/ 20 декабря 2010

Я полагаю, что проблема заключается в том, что вы продолжаете добавлять new Array() для массивов вместо того, чтобы давать им имена переменных, на которые можно указывать, следовательно, они никогда не будут одинаковыми, даже если они могут иметь такое же точное содержимое, какдруг друга.

Чтобы это работало так, как вы хотите, вам нужно присвоить new Array([step[0],step[1],r2]) переменной и проверить эту переменную вместо new Array()

var blah = new Array(step[0],step[1],r2);

// this will add the array to unavailArray
if(jQuery.inArray(blah,unavailArray)==-1){
    alert(jQuery.inArray(blah,unavailArray));

    unavailArray.push(blah);
  }else{
    alert('found so was not added');
}

// Try again and it wont, instead firing off the alert message
if(jQuery.inArray(blah,unavailArray)==-1){
    alert(jQuery.inArray(blah,unavailArray));

    unavailArray.push(blah);
  }else{
    alert('found so was not added');
}

Вот ссылка наJSFiddle Я сделал, чтобы проиллюстрировать это: Живой пример

...