2011-09-13 37 views
5

我在JavaScript中遇到了一個問題。給定兩個數組,返回一個只包含非相交項的數組

我有兩個數組,我想檢查它們是否與某些元素相交,然後刪除這些元素並返回沒有相交元素的新數組。

例如:

Array A ( 
[0] => 0 [1] => 1 
) 

Array B ( 
[0] => 2 [1] => 1 
) 

我要檢查他們,並返回:

Array result ( 
[0] => 0 [1] => 2 
) 

我怎樣才能做到這一點在JavaScript?

+3

http://stackoverflow.com/questions/1885557/simplest-code-for- array-intersection-in-javascript – Gerry

+0

thx對於響應,但是這個問題是關於返回一個帶有相交元素的數組。我想刪除它們,並將其餘的返回給新的數組 –

回答

8

結帳庫underscore.js

說你有兩個數組,

var a = [1, 2]; 
var b = [2, 3]; 

首先找到了工會。

var all = _.union(a, b); 

然後找到交集。

var common = _.intersection(a, b); 

最後的答案應該是工會和路口的區別。

var answer = _.difference(all, common) 
+2

+1 [Working example。](http://jsbin.com/ayujef/edit#javascript, live)可能安全地假設下劃線代碼是可接受的,因爲jQuery顯然已經被加載 – user113716

+0

感謝您的工作示例 - 看起來不錯:)下劃線在哲學上類似於jQuery,尺寸也不是太大,但它所有都取決於OP的要求 – Anurag

2

好吧,既然你指定的jQuery,試試這個:

var arr1 = [2, 3, 4]; 
var arr2 = [1, 2, 3]; 

var arr3 = $.merge($.grep(arr1, function(el, idx) { 
    return $.inArray(el, arr2) > -1; 
}, true), $.grep(arr2, function(el, idx) { 
    return $.inArray(el, arr1) > -1; 
}, true)); 

alert(arr3); 

它可能不是很有效,但它是比較簡潔。

+0

thankx爲響應,但我怎麼能實現這一點,並返回一個數組沒有相交的元素? –

+0

更新了我的回答 – Blazemonger

4

使用Array.filterArray.lastIndexOf,和Array.indexOf

var array1 = [1,2,3,4,5]; 
var array2 = [2,3]; 
var unique = array1.concat(array2) 
        .filter(function (item, index, array) { 
         return array.indexOf(item) == array.lastIndexOf(item); 
        }) 

無論方法是通過默認100%跨瀏覽器,但具有安全墊片兩個鏈路的IE < = 8

+0

感謝abstractdownvotefactor,數組存放在一個var中,並且不知道它是否索引這些元素。 –

+0

沒關係,我會編輯來證明這一點。 – Joe

+0

這不會給你'array2'中不出現在'array1'中的元素。 OP的例子似乎表明所有獨特的價值都保留下來。 – user113716

0

平原JS溶液,效率不高時,使用的jQuery爲:

function filter(a1, a2){ 
 
    var result = []; 
 
    for(i in a1){ 
 
    exists = false; 
 
    for(j in a2){ 
 
     if(a1[i] == a2[j]) 
 
     exists = true; 
 
    } 
 
    if(exists== false){ 
 
     result.push(a1[i]); 
 
    } 
 
    } 
 
    return result; 
 
} 
 

 
var arr1 = [1,2,3,4,5]; 
 
var arr2 = [4,5,6,7,8]; 
 
var result1 = filter(arr1, arr2); 
 
var result2 = filter(arr2, arr1); 
 

 
var result = result1.concat(result2);

+0

你真的不應該在Array *上使用'for-in' *(在JavaScript中)*。 – user113716

+0

我終於使用了下劃線插件和@anurag的代碼感謝你的幫助 –

+0

@patrick dw :同意不應該在JavaScript中使用for-in,因爲解析元素的順序很重要,這是它唯一的缺點,我認爲。 – mooglife

相關問題