ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 数组的 交集 差集 补集 并集 ES5的写法 ``` <pre class="calibre10">``` var a <span class="token1">=</span> <span class="token3">[</span><span class="token6">1</span><span class="token3">,</span><span class="token6">2</span><span class="token3">,</span><span class="token6">3</span><span class="token3">,</span><span class="token6">4</span><span class="token3">,</span><span class="token6">5</span><span class="token3">]</span> var b <span class="token1">=</span> <span class="token3">[</span><span class="token6">2</span><span class="token3">,</span><span class="token6">4</span><span class="token3">,</span><span class="token6">6</span><span class="token3">,</span><span class="token6">8</span><span class="token3">,</span><span class="token6">10</span><span class="token3">]</span> <span class="token">//交集</span> var c <span class="token1">=</span> a<span class="token3">.</span><span class="token4">filter</span><span class="token3">(</span><span class="token5">function</span><span class="token3">(</span>v<span class="token3">)</span><span class="token3">{</span> <span class="token5">return</span> b<span class="token3">.</span><span class="token4">indexOf</span><span class="token3">(</span>v<span class="token3">)</span> <span class="token1">></span> <span class="token1">-</span><span class="token6">1</span> <span class="token3">}</span><span class="token3">)</span> <span class="token">//差集</span> var d <span class="token1">=</span> a<span class="token3">.</span><span class="token4">filter</span><span class="token3">(</span><span class="token5">function</span><span class="token3">(</span>v<span class="token3">)</span><span class="token3">{</span> <span class="token5">return</span> b<span class="token3">.</span><span class="token4">indexOf</span><span class="token3">(</span>v<span class="token3">)</span> <span class="token1">==</span> <span class="token1">-</span><span class="token6">1</span> <span class="token3">}</span><span class="token3">)</span> <span class="token">//补集</span> var e <span class="token1">=</span> a<span class="token3">.</span><span class="token4">filter</span><span class="token3">(</span><span class="token5">function</span><span class="token3">(</span>v<span class="token3">)</span><span class="token3">{</span> <span class="token5">return</span> <span class="token1">!</span><span class="token3">(</span>b<span class="token3">.</span><span class="token4">indexOf</span><span class="token3">(</span>v<span class="token3">)</span> <span class="token1">></span> <span class="token1">-</span><span class="token6">1</span><span class="token3">)</span> <span class="token3">}</span><span class="token3">)</span><span class="token3">.</span><span class="token4">concat</span><span class="token3">(</span>b<span class="token3">.</span><span class="token4">filter</span><span class="token3">(</span><span class="token5">function</span><span class="token3">(</span>v<span class="token3">)</span><span class="token3">{</span> <span class="token5">return</span> <span class="token1">!</span><span class="token3">(</span>a<span class="token3">.</span><span class="token4">indexOf</span><span class="token3">(</span>v<span class="token3">)</span> <span class="token1">></span> <span class="token1">-</span><span class="token6">1</span><span class="token3">)</span> <span class="token3">}</span><span class="token3">)</span><span class="token3">)</span> <span class="token">//并集</span> var f <span class="token1">=</span> a<span class="token3">.</span><span class="token4">concat</span><span class="token3">(</span>b<span class="token3">.</span><span class="token4">filter</span><span class="token3">(</span><span class="token5">function</span><span class="token3">(</span>v<span class="token3">)</span><span class="token3">{</span> <span class="token5">return</span> <span class="token1">!</span><span class="token3">(</span>a<span class="token3">.</span><span class="token4">indexOf</span><span class="token3">(</span>v<span class="token3">)</span> <span class="token1">></span> <span class="token1">-</span><span class="token6">1</span><span class="token3">)</span> <span class="token3">}</span><span class="token3">)</span><span class="token3">)</span><span class="token3">;</span> console<span class="token3">.</span><span class="token4">log</span><span class="token3">(</span><span class="token2">"数组a:"</span><span class="token3">,</span> a<span class="token3">)</span><span class="token3">;</span> console<span class="token3">.</span><span class="token4">log</span><span class="token3">(</span><span class="token2">"数组b:"</span><span class="token3">,</span> b<span class="token3">)</span><span class="token3">;</span> console<span class="token3">.</span><span class="token4">log</span><span class="token3">(</span><span class="token2">"a与b的交集:"</span><span class="token3">,</span> c<span class="token3">)</span><span class="token3">;</span> console<span class="token3">.</span><span class="token4">log</span><span class="token3">(</span><span class="token2">"a与b的差集:"</span><span class="token3">,</span> d<span class="token3">)</span><span class="token3">;</span> console<span class="token3">.</span><span class="token4">log</span><span class="token3">(</span><span class="token2">"a与b的补集:"</span><span class="token3">,</span> e<span class="token3">)</span><span class="token3">;</span> console<span class="token3">.</span><span class="token4">log</span><span class="token3">(</span><span class="token2">"a与b的并集:"</span><span class="token3">,</span> f<span class="token3">)</span><span class="token3">;</span> ``` ``` ![](https://img.kancloud.cn/9d/22/9d226f750487dd8ff6bcaf01ce1207a9_317x121.png) 用ES6 的写法 ``` <pre class="calibre10">``` var a <span class="token1">=</span> <span class="token3">[</span><span class="token6">1</span><span class="token3">,</span><span class="token6">2</span><span class="token3">,</span><span class="token6">3</span><span class="token3">,</span><span class="token6">4</span><span class="token3">,</span><span class="token6">5</span><span class="token3">]</span> var b <span class="token1">=</span> <span class="token3">[</span><span class="token6">2</span><span class="token3">,</span><span class="token6">4</span><span class="token3">,</span><span class="token6">6</span><span class="token3">,</span><span class="token6">8</span><span class="token3">,</span><span class="token6">10</span><span class="token3">]</span> console<span class="token3">.</span><span class="token4">log</span><span class="token3">(</span><span class="token2">"数组a:"</span><span class="token3">,</span> a<span class="token3">)</span><span class="token3">;</span> console<span class="token3">.</span><span class="token4">log</span><span class="token3">(</span><span class="token2">"数组b:"</span><span class="token3">,</span> b<span class="token3">)</span><span class="token3">;</span> var sa <span class="token1">=</span> <span class="token5">new</span> <span class="token4">Set</span><span class="token3">(</span>a<span class="token3">)</span><span class="token3">;</span> var sb <span class="token1">=</span> <span class="token5">new</span> <span class="token4">Set</span><span class="token3">(</span>b<span class="token3">)</span><span class="token3">;</span> <span class="token">// 交集</span> let intersect <span class="token1">=</span> a<span class="token3">.</span><span class="token4">filter</span><span class="token3">(</span>x <span class="token1">=</span><span class="token1">></span> sb<span class="token3">.</span><span class="token4">has</span><span class="token3">(</span>x<span class="token3">)</span><span class="token3">)</span><span class="token3">;</span> <span class="token">// 差集</span> let minus <span class="token1">=</span> a<span class="token3">.</span><span class="token4">filter</span><span class="token3">(</span>x <span class="token1">=</span><span class="token1">></span> <span class="token1">!</span>sb<span class="token3">.</span><span class="token4">has</span><span class="token3">(</span>x<span class="token3">)</span><span class="token3">)</span><span class="token3">;</span> <span class="token">// 补集</span> let complement <span class="token1">=</span> <span class="token3">[</span><span class="token3">.</span><span class="token3">.</span><span class="token3">.</span>a<span class="token3">.</span><span class="token4">filter</span><span class="token3">(</span>x <span class="token1">=</span><span class="token1">></span> <span class="token1">!</span>sb<span class="token3">.</span><span class="token4">has</span><span class="token3">(</span>x<span class="token3">)</span><span class="token3">)</span><span class="token3">,</span> <span class="token3">.</span><span class="token3">.</span><span class="token3">.</span>b<span class="token3">.</span><span class="token4">filter</span><span class="token3">(</span>x <span class="token1">=</span><span class="token1">></span> <span class="token1">!</span>sa<span class="token3">.</span><span class="token4">has</span><span class="token3">(</span>x<span class="token3">)</span><span class="token3">)</span><span class="token3">]</span><span class="token3">;</span> <span class="token">// 并集</span> let unionSet <span class="token1">=</span> Array<span class="token3">.</span><span class="token4">from</span><span class="token3">(</span><span class="token5">new</span> <span class="token4">Set</span><span class="token3">(</span><span class="token3">[</span><span class="token3">.</span><span class="token3">.</span><span class="token3">.</span>a<span class="token3">,</span> <span class="token3">.</span><span class="token3">.</span><span class="token3">.</span>b<span class="token3">]</span><span class="token3">)</span><span class="token3">)</span><span class="token3">;</span> console<span class="token3">.</span><span class="token4">log</span><span class="token3">(</span><span class="token2">"a与b的交集:"</span><span class="token3">,</span> intersect<span class="token3">)</span><span class="token3">;</span> console<span class="token3">.</span><span class="token4">log</span><span class="token3">(</span><span class="token2">"a与b的差集:"</span><span class="token3">,</span> minus<span class="token3">)</span><span class="token3">;</span> console<span class="token3">.</span><span class="token4">log</span><span class="token3">(</span><span class="token2">"a与b的补集:"</span><span class="token3">,</span> complement<span class="token3">)</span><span class="token3">;</span> console<span class="token3">.</span><span class="token4">log</span><span class="token3">(</span><span class="token2">"a与b的并集:"</span><span class="token3">,</span> unionSet<span class="token3">)</span><span class="token3">;</span> ``` ``` ## **方法2:对 Array 进行扩展** ``` <pre class="calibre10">``` <span class="token">//数组迭代函数</span> Array<span class="token3">.</span>prototype<span class="token3">.</span>each <span class="token1">=</span> <span class="token5">function</span><span class="token3">(</span>fn<span class="token3">)</span><span class="token3">{</span> fn <span class="token1">=</span> fn <span class="token1">||</span> Function<span class="token3">.</span>K<span class="token3">;</span> var a <span class="token1">=</span> <span class="token3">[</span><span class="token3">]</span><span class="token3">;</span> var args <span class="token1">=</span> Array<span class="token3">.</span>prototype<span class="token3">.</span>slice<span class="token3">.</span><span class="token4">call</span><span class="token3">(</span>arguments<span class="token3">,</span> <span class="token6">1</span><span class="token3">)</span><span class="token3">;</span> <span class="token5">for</span><span class="token3">(</span>var i <span class="token1">=</span> <span class="token6">0</span><span class="token3">;</span> i <span class="token1"><</span> this<span class="token3">.</span>length<span class="token3">;</span> i<span class="token1">++</span><span class="token3">)</span><span class="token3">{</span> var res <span class="token1">=</span> fn<span class="token3">.</span><span class="token4">apply</span><span class="token3">(</span>this<span class="token3">,</span><span class="token3">[</span>this<span class="token3">[</span>i<span class="token3">]</span><span class="token3">,</span>i<span class="token3">]</span><span class="token3">.</span><span class="token4">concat</span><span class="token3">(</span>args<span class="token3">)</span><span class="token3">)</span><span class="token3">;</span> <span class="token5">if</span><span class="token3">(</span>res <span class="token1">!=</span> <span class="token5">null</span><span class="token3">)</span> a<span class="token3">.</span><span class="token4">push</span><span class="token3">(</span>res<span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token5">return</span> a<span class="token3">;</span> <span class="token3">}</span><span class="token3">;</span> <span class="token">//数组是否包含指定元素</span> Array<span class="token3">.</span>prototype<span class="token3">.</span>contains <span class="token1">=</span> <span class="token5">function</span><span class="token3">(</span>suArr<span class="token3">)</span><span class="token3">{</span> <span class="token5">for</span><span class="token3">(</span>var i <span class="token1">=</span> <span class="token6">0</span><span class="token3">;</span> i <span class="token1"><</span> this<span class="token3">.</span>length<span class="token3">;</span> i <span class="token1">++</span><span class="token3">)</span><span class="token3">{</span> <span class="token5">if</span><span class="token3">(</span>this<span class="token3">[</span>i<span class="token3">]</span> <span class="token1">==</span> suArr<span class="token3">)</span><span class="token3">{</span> <span class="token5">return</span> <span class="token6">true</span><span class="token3">;</span> <span class="token3">}</span> <span class="token3">}</span> <span class="token5">return</span> <span class="token6">false</span><span class="token3">;</span> <span class="token3">}</span> <span class="token">//不重复元素构成的数组</span> Array<span class="token3">.</span>prototype<span class="token3">.</span>uniquelize <span class="token1">=</span> <span class="token5">function</span><span class="token3">(</span><span class="token3">)</span><span class="token3">{</span> var ra <span class="token1">=</span> <span class="token5">new</span> <span class="token4">Array</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token5">for</span><span class="token3">(</span>var i <span class="token1">=</span> <span class="token6">0</span><span class="token3">;</span> i <span class="token1"><</span> this<span class="token3">.</span>length<span class="token3">;</span> i <span class="token1">++</span><span class="token3">)</span><span class="token3">{</span> <span class="token5">if</span><span class="token3">(</span><span class="token1">!</span>ra<span class="token3">.</span><span class="token4">contains</span><span class="token3">(</span>this<span class="token3">[</span>i<span class="token3">]</span><span class="token3">)</span><span class="token3">)</span><span class="token3">{</span> ra<span class="token3">.</span><span class="token4">push</span><span class="token3">(</span>this<span class="token3">[</span>i<span class="token3">]</span><span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token3">}</span> <span class="token5">return</span> ra<span class="token3">;</span> <span class="token3">}</span><span class="token3">;</span> <span class="token">//两个数组的交集</span> Array<span class="token3">.</span>intersect <span class="token1">=</span> <span class="token5">function</span><span class="token3">(</span>a<span class="token3">,</span> b<span class="token3">)</span><span class="token3">{</span> <span class="token5">return</span> a<span class="token3">.</span><span class="token4">uniquelize</span><span class="token3">(</span><span class="token3">)</span><span class="token3">.</span><span class="token4">each</span><span class="token3">(</span><span class="token5">function</span><span class="token3">(</span>o<span class="token3">)</span><span class="token3">{</span><span class="token5">return</span> b<span class="token3">.</span><span class="token4">contains</span><span class="token3">(</span>o<span class="token3">)</span> <span class="token1">?</span> o <span class="token3">:</span> <span class="token5">null</span><span class="token3">}</span><span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span><span class="token3">;</span> <span class="token">//两个数组的差集</span> Array<span class="token3">.</span>minus <span class="token1">=</span> <span class="token5">function</span><span class="token3">(</span>a<span class="token3">,</span> b<span class="token3">)</span><span class="token3">{</span> <span class="token5">return</span> a<span class="token3">.</span><span class="token4">uniquelize</span><span class="token3">(</span><span class="token3">)</span><span class="token3">.</span><span class="token4">each</span><span class="token3">(</span><span class="token5">function</span><span class="token3">(</span>o<span class="token3">)</span><span class="token3">{</span><span class="token5">return</span> b<span class="token3">.</span><span class="token4">contains</span><span class="token3">(</span>o<span class="token3">)</span> <span class="token1">?</span> <span class="token5">null</span> <span class="token3">:</span> o<span class="token3">}</span><span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span><span class="token3">;</span> <span class="token">//两个数组的补集</span> Array<span class="token3">.</span>complement <span class="token1">=</span> <span class="token5">function</span><span class="token3">(</span>a<span class="token3">,</span> b<span class="token3">)</span><span class="token3">{</span> <span class="token5">return</span> Array<span class="token3">.</span><span class="token4">minus</span><span class="token3">(</span>Array<span class="token3">.</span><span class="token4">union</span><span class="token3">(</span>a<span class="token3">,</span> b<span class="token3">)</span><span class="token3">,</span>Array<span class="token3">.</span><span class="token4">intersect</span><span class="token3">(</span>a<span class="token3">,</span> b<span class="token3">)</span><span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span><span class="token3">;</span> <span class="token">//两个数组并集</span> Array<span class="token3">.</span>union <span class="token1">=</span> <span class="token5">function</span><span class="token3">(</span>a<span class="token3">,</span> b<span class="token3">)</span><span class="token3">{</span> <span class="token5">return</span> a<span class="token3">.</span><span class="token4">concat</span><span class="token3">(</span>b<span class="token3">)</span><span class="token3">.</span><span class="token4">uniquelize</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span><span class="token3">;</span> ``` ``` 使用: ``` <pre class="calibre10">``` var a <span class="token1">=</span> <span class="token3">[</span><span class="token6">1</span><span class="token3">,</span><span class="token6">2</span><span class="token3">,</span><span class="token6">3</span><span class="token3">,</span><span class="token6">4</span><span class="token3">,</span><span class="token6">5</span><span class="token3">]</span> var b <span class="token1">=</span> <span class="token3">[</span><span class="token6">2</span><span class="token3">,</span><span class="token6">4</span><span class="token3">,</span><span class="token6">6</span><span class="token3">,</span><span class="token6">8</span><span class="token3">,</span><span class="token6">10</span><span class="token3">]</span> console<span class="token3">.</span><span class="token4">log</span><span class="token3">(</span><span class="token2">"数组a:"</span><span class="token3">,</span> a<span class="token3">)</span><span class="token3">;</span> console<span class="token3">.</span><span class="token4">log</span><span class="token3">(</span><span class="token2">"数组b:"</span><span class="token3">,</span> b<span class="token3">)</span><span class="token3">;</span> console<span class="token3">.</span><span class="token4">log</span><span class="token3">(</span><span class="token2">"a与b的交集:"</span><span class="token3">,</span> Array<span class="token3">.</span><span class="token4">intersect</span><span class="token3">(</span>a<span class="token3">,</span> b<span class="token3">)</span><span class="token3">)</span><span class="token3">;</span> console<span class="token3">.</span><span class="token4">log</span><span class="token3">(</span><span class="token2">"a与b的差集:"</span><span class="token3">,</span> Array<span class="token3">.</span><span class="token4">minus</span><span class="token3">(</span>a<span class="token3">,</span> b<span class="token3">)</span><span class="token3">)</span><span class="token3">;</span> console<span class="token3">.</span><span class="token4">log</span><span class="token3">(</span><span class="token2">"a与b的补集:"</span><span class="token3">,</span> Array<span class="token3">.</span><span class="token4">complement</span><span class="token3">(</span>a<span class="token3">,</span> b<span class="token3">)</span><span class="token3">)</span><span class="token3">;</span> console<span class="token3">.</span><span class="token4">log</span><span class="token3">(</span><span class="token2">"a与b的并集:"</span><span class="token3">,</span> Array<span class="token3">.</span><span class="token4">union</span><span class="token3">(</span>a<span class="token3">,</span> b<span class="token3">)</span><span class="token3">)</span><span class="token3">;</span> ``` ``` ## **方法三:使用 jQuery 实现** 如果项目中有引入 jQuery,那么实现起来也很简单。 ``` <pre class="calibre17">``` var a <span class="token1">=</span> <span class="token3">[</span><span class="token6">1</span><span class="token3">,</span><span class="token6">2</span><span class="token3">,</span><span class="token6">3</span><span class="token3">,</span><span class="token6">4</span><span class="token3">,</span><span class="token6">5</span><span class="token3">]</span> var b <span class="token1">=</span> <span class="token3">[</span><span class="token6">2</span><span class="token3">,</span><span class="token6">4</span><span class="token3">,</span><span class="token6">6</span><span class="token3">,</span><span class="token6">8</span><span class="token3">,</span><span class="token6">10</span><span class="token3">]</span> console<span class="token3">.</span><span class="token4">log</span><span class="token3">(</span><span class="token2">"数组a:"</span><span class="token3">,</span> a<span class="token3">)</span><span class="token3">;</span> console<span class="token3">.</span><span class="token4">log</span><span class="token3">(</span><span class="token2">"数组b:"</span><span class="token3">,</span> b<span class="token3">)</span><span class="token3">;</span> <span class="token">// 交集</span> let intersect <span class="token1">=</span> $<span class="token3">(</span>a<span class="token3">)</span><span class="token3">.</span><span class="token4">filter</span><span class="token3">(</span>b<span class="token3">)</span><span class="token3">.</span><span class="token4">toArray</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token">// 差集</span> let minus <span class="token1">=</span> $<span class="token3">(</span>a<span class="token3">)</span><span class="token3">.</span><span class="token4">not</span><span class="token3">(</span>b<span class="token3">)</span><span class="token3">.</span><span class="token4">toArray</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token">// 补集</span> let complement <span class="token1">=</span> $<span class="token3">(</span>a<span class="token3">)</span><span class="token3">.</span><span class="token4">not</span><span class="token3">(</span>b<span class="token3">)</span><span class="token3">.</span><span class="token4">toArray</span><span class="token3">(</span><span class="token3">)</span><span class="token3">.</span><span class="token4">concat</span><span class="token3">(</span>$<span class="token3">(</span>b<span class="token3">)</span><span class="token3">.</span><span class="token4">not</span><span class="token3">(</span>a<span class="token3">)</span><span class="token3">.</span><span class="token4">toArray</span><span class="token3">(</span><span class="token3">)</span><span class="token3">)</span><span class="token3">;</span> <span class="token">// 并集</span> let unionSet <span class="token1">=</span> $<span class="token3">.</span><span class="token4">unique</span><span class="token3">(</span>a<span class="token3">.</span><span class="token4">concat</span><span class="token3">(</span>b<span class="token3">)</span><span class="token3">)</span><span class="token3">;</span> console<span class="token3">.</span><span class="token4">log</span><span class="token3">(</span><span class="token2">"a与b的交集:"</span><span class="token3">,</span> intersect<span class="token3">)</span><span class="token3">;</span> console<span class="token3">.</span><span class="token4">log</span><span class="token3">(</span><span class="token2">"a与b的差集:"</span><span class="token3">,</span> minus<span class="token3">)</span><span class="token3">;</span> console<span class="token3">.</span><span class="token4">log</span><span class="token3">(</span><span class="token2">"a与b的补集:"</span><span class="token3">,</span> complement<span class="token3">)</span><span class="token3">;</span> console<span class="token3">.</span><span class="token4">log</span><span class="token3">(</span><span class="token2">"a与b的并集:"</span><span class="token3">,</span> unionSet<span class="token3">)</span><span class="token3">;</span> ``` ```