2017-01-26 2 views
0

У меня есть сравнение рабочего массива (протестировано с различного рода кодом), который выглядит следующим образом:сравнения Массив не работает

var a = [0,1,2] 
 
var b = [1,2] 
 

 
var match = [] 
 
var miss = [] 
 

 
func(a,b, match, miss); 
 

 
function func(a, b, matches, misses) { \t \t 
 
    for (var i=0; i<b.length; i++) { 
 
    for (var j=0; j<a.length; j++) { \t 
 
     if (b[i] == a[j]) { 
 
     console.log("Found"); 
 
     matches.push(b[i]) 
 
     } 
 
    } 
 
    } 
 
    console.log("Matches: " + matches); 
 
    console.log("Misses: " + misses); 
 
}

Он работает, как правило, хорошо. Однако на этот раз это не так. У меня есть два массива, которые имеют разный размер (а больше b) и могут иметь различный контент типа «100.AB 12345».

Я не могу объяснить, почему моя функция не работает в этом случае. Кто-нибудь может мне помочь? Он не находит совпадений, все пропущено, даже если они совпадают.

+0

Приведенный выше код работает отлично право. Он выводит соответствие массиву как 1,2, который ожидается. Какая у вас ошибка в коде? – Ananth

+0

У меня есть два массива, которые я получаю из разных систем. Они выглядят так: firstArray: 100.AF 027731,100.AF 027755,100.AF 027925 и т. Д. SecondArray: 210.AF 000062,150.AF 005909,132.AF 183654 и т. Д. Как-то код не работает с этим ... тип, возможно, может быть? – Faizy

ответ

1

Я думаю, что эта линия:

if (b[j] == a[j]) 

Если b[j]b[i] быть? Поскольку a больше, чем b, с помощью индексатора j будет пытаться ссылаться после окончания b.

+1

Ты прав. Однако я поменял его по ошибке. Это было b [i], поэтому это не решение моей проблемы. Но спасибо за записку. – Faizy

0

Здравствуйте проверить код ниже она будет прекрасно работать даже больше, чем б или б больше, чем

var a = ['a','ab','c','d','e']; 
 
var b = ['ef','f','ab','a']; 
 
var a1,b1; 
 
var match = []; 
 
var miss = []; 
 
var temp_a=a.length; 
 
var temp_b=b.length; 
 
if(temp_a > temp_b){ 
 
\t a1=b; 
 
    b1=a; 
 
}else{ 
 
\t a1=a; 
 
\t b1=b; 
 
} 
 
func(a1,b1, match, miss); 
 

 
function func(a, b, matches, misses) { \t \t 
 
\t \t for (var i=0; i<b.length; i++) { 
 
\t \t \t for (var j=0; j<a.length; j++) { \t 
 
\t \t \t \t if (b[i] == a[j]) { 
 
\t \t \t \t \t console.log("Found"); 
 
\t \t \t \t \t matches.push(b[i]) 
 
\t \t \t \t } 
 
\t \t \t } 
 
\t \t } 
 
\t console.log("Matches: " + matches); 
 
\t console.log("Misses: " + misses); 
 
}

+0

Эй, спасибо. Код выглядит прекрасно и работает. Однако при использовании в примере, где мой код выше не работает, ваш код тоже не работает. Возможно ли, что массив должен быть строковым типом? – Faizy

+0

проверить отредактированный код для строкового формата, и он будет работать нормально –