2015-06-12 2 views
1

Я хочу найти массив массивов и посмотреть, существует ли массив, равный определенному массиву, который я поставляю. Я попытался использовать indexOf(), но это не сработало. У кого-нибудь есть хорошая техника для этого?Как вы можете искать массив массивов в javascript?

var ary = [['1','2'],['3','4'],['5','6']]; 
ary.indexOf(['1','2']); //I want to get 0 here, or something like -1 if it's not present 
+0

Вам нужен цикл и глубокое сравнение. – SLaks

+1

[Во-первых, научитесь сравнивать два массива] (http://stackoverflow.com/questions/7837456/comparing-two-arrays-in-javascript), а затем пропустите свой массив и сравните каждый элемент с «массивом поиска», – tcigrand

+0

Что делать, если вы ищете ['2', '1'], это то же самое, что и ['1', '2']? – Octopus

ответ

1

var ary = [['1','2'],['3','4'],['5','6']]; 
 

 
function contains(array, value){ 
 
    for (var i = 0; i < array.length; i++){ 
 
    if (array[i] === value) 
 
     return true; 
 
    if ( value instanceof Array 
 
     && array[i] instanceof Array 
 
     && value.length == array[i].length){ 
 
     var found = true; 
 
     for (var j = 0; j < value.length; j++) 
 
     if (value[j] !== array[i][j]) 
 
      found = false; 
 
     if (found) 
 
     return true; 
 
    } 
 
    } 
 
    return false; 
 
} 
 

 
console.log(contains(ary, ['1','2'])); 
 
console.log(contains(ary, [1,'2'])); 
 
console.log(contains(ary, ['3','4']));

1

Использование indexOf с join. Это не обязательно с одномерными массивами, но является правильным подходом в этом escenario:

var comp = ['1','2']; 

for(var i = 0, j = ary.length;i < j;i++) { 
    if(ary[i].join().indexOf(comp.join()) >= 0) { 
     //do stuff here 
    } 
} 
+0

'ary [i] .join() === comp.join()' сделает намного понятнее то, что вы здесь делаете. Что вы делаете, может фактически дать ложные срабатывания. Рассмотрим '[1, [1,2]]' vs '[1,2]'. –

+0

Что касается производительности: лучше ли сравнивать строки или массивы? – user2755140

1

Что касается моих знаний, JavaScript не имеет функций для проверки индекса многомерного массива , Вы можете сделать это вручную: вы объявляете два значения, которые хотите найти, затем перебирайте массив и проверяйте, соответствуют ли первый и второй элементы текущего подмашины вашим условиям ... ... ОК, я думаю, что пример нужен, извините за мое ужасное объяснение!

function indexMultiDArray (myArr){ 
    var check = ['n1','n2']; 
    var i=0; 
    for (i; i < myArr.length; i++){ 
     if (myArr[i][0]===check[0] && myArr[i][1]===check[1]){ 
      alert(myArr[i][0]+' '+myArr[i][1]); 
     } 
    } 
} 

В принципе, вы цикл через него: если первый и второй элемент текущего куплет соответствует первой и второй элемент check куплет, у вас есть: сделать что-то с ним;)

Смежные вопросы