Jeśli nie potrzebujesz przymusu typu (z powodu użycia indexOf), możesz spróbować czegoś takiego:
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);
Gdzie arrzawiera elementy docelowe. Na koniec foundpokaże, czy druga tablica miała co najmniej jedno dopasowanie do celu.
Oczywiście możesz zamienić liczby na wszystko, czego chcesz użyć - ciągi znaków są w porządku, tak jak w twoim przykładzie.
W moim konkretnym przykładzie wynik powinien wynikać z truetego, że druga tablica 3istnieje w celu.
AKTUALIZACJA:
Oto jak zorganizowałbym to w funkcję (z pewnymi drobnymi zmianami wcześniej):
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/
W takim przypadku funkcję można zmodyfikować, aby targetArrayzostała przekazana jako argument zamiast zakodowana na stałe w zamknięciu.
AKTUALIZACJA 2:
Chociaż moje powyższe rozwiązanie może działać i być (mam nadzieję, że więcej) czytelne, uważam, że „lepszym” sposobem radzenia sobie z opisaną przeze mnie koncepcją jest zrobienie czegoś nieco inaczej. „Problem” z powyższym rozwiązaniem polega na tym, że indexOfwewnętrzna pętla powoduje całkowite zapętlenie tablicy docelowej dla każdego elementu w drugiej tablicy. Można to łatwo „naprawić” za pomocą „wyszukiwania” (mapa ... dosłownie obiekt JavaScript). Pozwala to na dwie proste pętle na każdą tablicę. Oto przykład:
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;
};
PRÓBNY: http://jsfiddle.net/5Lv9v/
Minusem tego rozwiązania jest to, że tylko liczby i ciągi (i logiczne) mogą być używane (poprawnie), ponieważ wartości są (domyślnie) konwertowane na ciągi i ustawiane jako klucze do mapy wyszukiwania. Nie jest to do końca dobre / możliwe / łatwe do wykonania dla wartości nieliteralnych.
forpętli i iteruj tablicę docelową. Jeśli każdy element jest zawarty w bieżącej tablicy (użyjcurrent.indexOf(elem) !== -1), to wszystkie są tam.