Здесь много ответов, что все работает. Я думаю, что это самый быстрый, если вы имеете дело только со строками. Он выполняет только один цикл каждого массива, а затем один цикл через результаты. Большинство других примеров выполняли бы 100 или 1000 циклов, если массивы были больше, чем всего несколько записей.
var names1 = ["john", "steve", "joe", "tom", "marco", "eric", "buddy"];
var names2 = ["joe", "marco", "buddy", "chris", "tim", "clarke", "pat"];
var intersection = function(firstArray, secondArray) {
var matches = {}, results = [], a = firstArray, b = secondArray, i, l;
for (i=0, l=a.length; i<l; i++) {
matches[a[i]] = 1;
}
for (i=0, l=b.length; i<l; i++) {
if (matches[b[i]]) matches[b[i]]++;
}
for (i in matches) {
if (matches[i] === 2) results.push(i);
}
return results;
};
console.log(intersection(names1,names2));
В основном он проходит через первый массив и добавляет каждую запись к объекту со значением один. Затем он проходит через второй массив, и если у объекта уже есть ключ для этого, он увеличивает его на 1. Затем он перебирает объект и выталкивает все ключи со значением 2 в новый массив, который он возвращает.
Даже с 1000+ элементами в каждом массиве это будет делать только три полных цикла.
Вот jsfiddle: http://jsfiddle.net/pseudosavant/5EeUZ/
ли соответствующий элемент гарантированно строку? –
Вы пытаетесь получить все совпадения или просто проверить, существует ли значение в обоих случаях? – vol7ron
Guarenteed быть струной, да. – Trip