Якщо вам не потрібен примус введення (через використання indexOf
), ви можете спробувати щось подібне:
var arr = [1, 2, 3];
var check = [3, 4];
var found = false;
for (var i = 0; i < check.length; i++) {
if (arr.indexOf(check[i]) > -1) {
found = true;
break;
}
}
console.log(found);
Де arr
містяться цільові елементи. Наприкінці found
покаже, чи мав другий масив хоча б один матч проти цілі.
Звичайно, ви можете поміняти номери на все, що хочете використовувати - рядки чудово, як ваш приклад.
І в моєму конкретному прикладі результат повинен бути, true
оскільки другий масив 3
існує в цілі.
ОНОВЛЕННЯ:
Ось як я б організував його у функцію (з незначними змінами раніше):
var anyMatchInArray = (function () {
"use strict";
var targetArray, func;
targetArray = ["apple", "banana", "orange"];
func = function (checkerArray) {
var found = false;
for (var i = 0, j = checkerArray.length; !found && i < j; i++) {
if (targetArray.indexOf(checkerArray[i]) > -1) {
found = true;
}
}
return found;
};
return func;
}());
DEMO: http://jsfiddle.net/u8Bzt/
У цьому випадку функцію можна змінити, щоб вона targetArray
була передана як аргумент замість жорсткого кодування в закритті.
ОНОВЛЕННЯ2:
Хоча моє рішення вище може працювати і бути (сподіваюсь, більше) читабельним, я вважаю, що "кращим" способом впоратися з описаною нами концепцією є зробити щось трохи інакше. «Проблема» вищезгаданого рішення полягає в тому, що indexOf
внутрішня петля викликає цільовий масив, який повністю перекинуто на кожен елемент іншого масиву. Це можна легко "виправити" за допомогою "пошуку" (мапа ... буквальний об'єкт JavaScript). Це дозволяє дві прості петлі над кожним масивом. Ось приклад:
var anyMatchInArray = function (target, toMatch) {
"use strict";
var found, targetMap, i, j, cur;
found = false;
targetMap = {};
// Put all values in the `target` array into a map, where
// the keys are the values from the array
for (i = 0, j = target.length; i < j; i++) {
cur = target[i];
targetMap[cur] = true;
}
// Loop over all items in the `toMatch` array and see if any of
// their values are in the map from before
for (i = 0, j = toMatch.length; !found && (i < j); i++) {
cur = toMatch[i];
found = !!targetMap[cur];
// If found, `targetMap[cur]` will return true, otherwise it
// will return `undefined`...that's what the `!!` is for
}
return found;
};
DEMO: http://jsfiddle.net/5Lv9v/
Мінус цього рішення полягає в тому, що можна використовувати (правильно) лише числа і рядки (і булеві), оскільки значення (неявно) перетворюються на рядки і встановлюються як ключі до карти пошуку. Це не зовсім добре / можливо / легко зробити для нелітеральних значень.
for
цикл і повторіть цільовий масив. Якщо кожен елемент міститься в поточному масиві (використовуйтеcurrent.indexOf(elem) !== -1)
, значить, вони всі є там.