亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用Javascript數組計算集合差異的最快或最優雅的方法是什么?

使用Javascript數組計算集合差異的最快或最優雅的方法是什么?

子衿沉夜 2019-08-08 10:26:52
使用Javascript數組計算集合差異的最快或最優雅的方法是什么?讓我們A和B兩套。我正在尋找真正快速或優雅的方法來計算它們之間的集合差異(A - B或者A \B,取決于您的偏好)。正如標題所說,這兩個集合作為Javascript數組進行存儲和操作。筆記:壁虎特有的技巧是可以的我更喜歡堅持本機功能(但如果速度更快,我會對輕量級庫開放)我見過,但沒有經過測試,JS.Set(見前一點)編輯:我注意到有關包含重復元素的集合的注釋。當我說“set”時,我指的是數學定義,這意味著(除其他外)它們不包含重復元素。
查看完整描述

3 回答

?
斯蒂芬大帝

TA貢獻1827條經驗 獲得超8個贊

如果不知道這是否最有效,但也許是最短的

A = [1, 2, 3, 4];B = [1, 3, 4, 7];diff = A.filter(function(x) { return B.indexOf(x) < 0 })console.log(diff);

已更新至ES6:

A = [1, 2, 3, 4];B = [1, 3, 4, 7];diff = A.filter(x => !B.includes(x) );console.log(diff);


查看完整回答
反對 回復 2019-08-08
?
鴻蒙傳說

TA貢獻1865條經驗 獲得超7個贊

console.clear();

let a = new Set([1, 2, 3, 4]);

let b = new Set([5, 4, 3, 2]);



let a_minus_b = new Set([...a].filter(x => !b.has(x)));

let b_minus_a = new Set([...b].filter(x => !a.has(x)));

let a_intersect_b = new Set([...a].filter(x => b.has(x))); 


console.log([...a_minus_b]) // {1}

console.log([...b_minus_a]) // {5}

console.log([...a_intersect_b]) // {2,3,4}


查看完整回答
反對 回復 2019-08-08
?
烙印99

TA貢獻1829條經驗 獲得超13個贊

您可以將對象用作地圖,以避免線性掃描B每個元素,Auser187291的答案

function setMinus(A, B) {
    var map = {}, C = [];

    for(var i = B.length; i--; )
        map[B[i].toSource()] = null; // any other value would do

    for(var i = A.length; i--; ) {
        if(!map.hasOwnProperty(A[i].toSource()))
            C.push(A[i]);
    }

    return C;}

非標準toSource()方法用于獲取唯一的屬性名稱; 如果所有元素都已經具有唯一的字符串表示(如數字的情況),則可以通過刪除toSource()調用來加速代碼。


查看完整回答
反對 回復 2019-08-08
  • 3 回答
  • 0 關注
  • 978 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號