我在JavaScript中遇到了一個問題。給定兩個數組,返回一個只包含非相交項的數組
我有兩個數組,我想檢查它們是否與某些元素相交,然後刪除這些元素並返回沒有相交元素的新數組。
例如:
Array A (
[0] => 0 [1] => 1
)
Array B (
[0] => 2 [1] => 1
)
我要檢查他們,並返回:
Array result (
[0] => 0 [1] => 2
)
我怎樣才能做到這一點在JavaScript?
我在JavaScript中遇到了一個問題。給定兩個數組,返回一個只包含非相交項的數組
我有兩個數組,我想檢查它們是否與某些元素相交,然後刪除這些元素並返回沒有相交元素的新數組。
例如:
Array A (
[0] => 0 [1] => 1
)
Array B (
[0] => 2 [1] => 1
)
我要檢查他們,並返回:
Array result (
[0] => 0 [1] => 2
)
我怎樣才能做到這一點在JavaScript?
結帳庫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)
+1 [Working example。](http://jsbin.com/ayujef/edit#javascript, live)可能安全地假設下劃線代碼是可接受的,因爲jQuery顯然已經被加載 – user113716
感謝您的工作示例 - 看起來不錯:)下劃線在哲學上類似於jQuery,尺寸也不是太大,但它所有都取決於OP的要求 – Anurag
好吧,既然你指定的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);
它可能不是很有效,但它是比較簡潔。
thankx爲響應,但我怎麼能實現這一點,並返回一個數組沒有相交的元素? –
更新了我的回答 – Blazemonger
使用Array.filter,Array.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
感謝abstractdownvotefactor,數組存放在一個var中,並且不知道它是否索引這些元素。 –
沒關係,我會編輯來證明這一點。 – Joe
這不會給你'array2'中不出現在'array1'中的元素。 OP的例子似乎表明所有獨特的價值都保留下來。 – user113716
平原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);
你真的不應該在Array *上使用'for-in' *(在JavaScript中)*。 – user113716
我終於使用了下劃線插件和@anurag的代碼感謝你的幫助 –
@patrick dw :同意不應該在JavaScript中使用for-in,因爲解析元素的順序很重要,這是它唯一的缺點,我認爲。 – mooglife
http://stackoverflow.com/questions/1885557/simplest-code-for- array-intersection-in-javascript – Gerry
thx對於響應,但是這個問題是關於返回一個帶有相交元素的數組。我想刪除它們,並將其餘的返回給新的數組 –