Если вас беспокоит неэффективность, сравните два подхода ниже:
Неэффективно (максимум i * j итераций):
var list1 = [1, 2, 3, 4, 5, 6];
var list2 = ['a', 'b', 'c', 3, 'd', 'e'];
for (var i in list1) {
for (var j in list2) {
if (list1[i] == list2[j]) {
alert('found ' + list1[i] + ' in both lists');
}
}
}
Эффективно (максимум i + j итераций)
var list1 = [1, 2, 3, 4, 5, 6];
var list2 = ['a', 'b', 'c', 3, 'd', 'e'];
var lookup = {};
for (var j in list2) {
lookup[list2[j]] = list2[j];
}
for (var i in list1) {
if (typeof lookup[list1[i]] != 'undefined') {
alert('found ' + list1[i] + ' in both lists');
break;
}
}
Как только вы используете поиск по словарю вместо циклического перебора обоих массивов, вам просто нужно реализовать свою логику для сопоставления соответствующих ключей и вывода их в массив результатов.