JavaScript で 2 つの配列の差を取得するにはどうすればよいでしょうか? 質問する

JavaScript で 2 つの配列の差を取得するにはどうすればよいでしょうか? 質問する

JavaScript で 2 つの配列の差を返す方法はありますか?

例えば:

var a1 = ['a', 'b'];
var a2 = ['a', 'b', 'c', 'd'];

// need ["c", "d"]

ベストアンサー1

Array.prototype.includes()(ES2016/ES7) がここで役立ちます。


交差点

let intersection = arr1.filter(x => arr2.includes(x));

交差ベン図

arr1の両方に存在する値を生成しますarr2

  • [1,2,3]そして[2,3]降伏する[2,3]
  • [1,2,3]そして[2,3,5]また[2,3]

違い

(Aのみの値)

let difference = arr1.filter(x => !arr2.includes(x));

右差ベン図

だけに存在する値を生成しますarr1

  • [1,2,3]そして[2,3]降伏する[1]
  • [1,2,3]そして[2,3,5]また[1]

対称差

let symDifference = arr1.filter(x => !arr2.includes(x))
                        .concat(arr2.filter(x => !arr1.includes(x)));

対称差ベン図

またはのみに含まれ両方には含まれない値を生成します(「排他的論理和」)。arr1arr2

両方の配列の差を互いに取り、2 つの結果を組み合わせると、次のようになります (arr1に含まれないすべての要素を含む配列が得られarr2、その逆も同様です)。

  • [1,2,3]そして[2,3]降伏する[1]
  • [1,2,3]そして[2,3,5]降伏する[1,5]

として@Joshaven Potterは回答で指摘したこれを直接 に割り当てることができるArray.prototypeので、次のように配列で直接使用できます。

Array.prototype.diff = function(arr2) { 
  return this.filter(x => !arr2.includes(x)); 
}
[1, 2, 3].diff([2, 3]) // [1]

おすすめ記事