1. ホーム
  2. javascript

[解決済み] 2つの配列で一致する値を見つけるにはどうしたらいいですか?重複

2022-10-14 14:40:37

質問

2つの配列があり、その2つを比較して、一致する値のみを返したい。例えば、両方の配列が値 cat というように、それが返されます。このようなものは見つかっていません。類似性を返すには、どのような方法があるでしょうか?

var array1 = ["cat", "sum","fun", "run"];
var array2 = ["bat", "cat","dog","sun", "hut", "gut"];

//if value in array1 is equal to value in array2 then return match: cat

どのように解決するのですか?

当然ながら、私のやり方は、1番目の配列を一度ループして、2番目の配列の各値のインデックスをチェックすることでした。もしインデックスが > -1 であれば、次に push を返された配列の上に置く。

​Array.prototype.diff = function(arr2) {
    var ret = [];
    for(var i in this) {   
        if(arr2.indexOf(this[i]) > -1){
            ret.push(this[i]);
        }
    }
    return ret;
};

私のソリューションは、他のソリューションのように2つのループを使用しないので、少し速く実行できるかもしれません。もしあなたが for..in の使用を避けたい場合は、最初に両方の配列をソートしてすべての値を再インデックス化することができます。

Array.prototype.diff = function(arr2) {
    var ret = [];
    this.sort();
    arr2.sort();
    for(var i = 0; i < this.length; i += 1) {
        if(arr2.indexOf(this[i]) > -1){
            ret.push(this[i]);
        }
    }
    return ret;
};

使用法は次のようになります。

var array1 = ["cat", "sum","fun", "run", "hut"];
var array2 = ["bat", "cat","dog","sun", "hut", "gut"];

console.log(array1.diff(array2));

もし、Arrayのプロトタイプを拡張することに問題があるのなら、簡単にこれを関数に変更することができます。

var diff = function(arr, arr2) {

そして、funcがもともと言っていた場所を変更します。 thisarr2 .