2015-12-16 20 views
1

我想要一個比較兩個數組的簡單方法。一個數組有一個電子郵件列表,另一個數組是完成表單的電子郵件列表。然後,我想要返回未完成表單的人員列表。這是我有的功能,但它的工作非常緩慢。比較用戶數組字符串以列出空的用戶

function findMissingUsers() { 
    var sheet = getSheet();  
    users = [array of all emails]; 
    completedUsers = [array of emails who completed form]; 

    users.forEach(function (row) { 
    completedUsers.forEach(function (user) { 
    if(row.Email != user.Username) { 
     console.log(row); 
    } 
    }); 
    }); 
    } 

試圖找到一個更有效的方法來做到這一點。

+0

是'completedUsers'數組排序或輕鬆排序?如果是這樣,你可以嘗試使用'completedUsers'的二進制搜索,而不是順序搜索,它應該是'O(n log m)',除非我錯了。 – mcon

回答

1

如何:

completedUsers.filter(function(n) { 
    return users.indexOf(n) != -1 
}); 

here

+0

你試過了嗎? – rphv

+0

它是一個對象數組,而不是一個電子郵件ID(字符串)數組。 – void

+0

@void根據提供的代碼都是電子郵件數組。 – scareddragon

0

您可以使用例如lodash庫和_.difference函數。詳情here

0

你可以這樣說:

var incompletedUsers = users.filter(function(user){ 
    return completedUsers.every(function(completedUser){ 
     return user.Email !== completedUser.Username; 
    }); 
});