0

最初の配列の少なくとも 1 つの値が 2 番目の配列に存在するかどうかを確認するにはどうすればよいですか?たとえば、car_1 配列と car_2 配列に BMW があるかどうかを確認するにはどうすればよいですか?

var cars_1 = new Array("Saab","Volvo","BMW");
var cars_2 = new Array("Honda","Mazda","BMW", "suzuki");
4

7 に答える 7

2

いくつかを使用して完全なソリューション:

// will return true if at least one element of cars_1 is in cars_2
cars_1.some(function (e) {
    return cars_2.indexOf(e) >= 0;
});
于 2013-03-23T01:01:28.590 に答える
2

すばやく簡単な方法:

function overlap(arr1,arr2) {
  for(var i = 0; i < arr1.length; ++i)
    if(arr2.indexOf(arr1[i]) != -1)
      return true;
  return false;
}
于 2013-03-23T01:02:05.173 に答える
1

簡単な答え:

for (var i =0; i<cars_1.length; i++){
    for (var j=0; j<cars_2.length; j++){
        if(cars_2[j] == cars_1[i]) return true;
    }
}
return false;

編集:わかりました、コメントに応じてより効率的です:) Edit2:わかりました、さらに効率的です:)

于 2013-03-23T01:02:07.763 に答える
0

シンプルな O(m+n) ソリューション:

var cars_1 = ["Saab","Volvo","BMW"];
var cars_2 = ["Honda","Mazda","BMW", "suzuki"];

// build up a hash table of the cars in the 1st sequence:
var set_1 = {};
for (var i = 0; i < cars_1.length; ++i) {
    set_1[cars_1[i]] = true;
}

// look if there is a car in sequence 2 that is in set_1:
var has_intersection = false;
for (var i = 0; i < cars_2.length; ++i) {
    if (set_1[cars_2[i]] === true) {
        has_intersection = true;
        break;
    }
}

どのブラウザでも動作します。

于 2013-03-23T01:04:20.650 に答える
0

ブラウザがサポートしている場合は、.someメソッドを使用できます。

var cars1 = [...],
    cars2 = [...];

var res = cars1.some(function(a) {
    return cars2.indexOf(a) > -1;
});

そうでない場合は、独自のシムを作成できます。

function some(list, callback) {
    var len = list.length;

    for (var i = len; i--;) {
        if (callback(list[i], i)) {
            return true;
        }
    }
    return false;
}

var res = some(cars1, function(a) {
    return cars2.indexOf(a) > -1;
});
于 2013-03-23T01:04:53.163 に答える
-3

これを行うにはいくつかの方法があります。

の指標()

var cars_1 = ["Saab","Volvo","BMW"];
var cars_2 = ["Honda","Mazda","BMW", "suzuki"];

cars_1.indexOf("BMW") != -1
// true
于 2013-03-23T00:58:32.220 に答える