簡體   English   中英

從其他數組刪除數組過濾器中的記錄

[英]Remove record from array filter by other array

我對數組過濾有疑問。

假設我有兩個數組:

var names = ["john", "sarah", "dennis"];
var emails = ["john.doe@gmail.com", "william.iron@gmail.com", "bruce.lee@example.com"];

現在哇,如果名稱出現在電子郵件中,我可以比較這些數據並刪除它嗎?

結果,我應該得到沒有john.doe@gmail.com的第三個數組:

var results = ["william.iron@gmail.com","bruce.lee@example.com"];

感謝幫助。

您可以過濾emails並檢查names如果電子郵件包含名稱)。

 var names = ["john", "sarah", "dennis"], emails = ["john.doe@gmail.com", "william.iron@gmail.com", "bruce.lee@example.com"], result = emails.filter(email => !names.some(name => email.includes(name))); console.log(result); 

通過使用正則表達式進行檢查的另一種方法。

 var names = ["john", "sarah", "dennis"], regexp = new RegExp(names.join('|'), 'i'), emails = ["john.doe@gmail.com", "william.iron@gmail.com", "bruce.lee@example.com"], result = emails.filter(email => !regexp.test(email)); console.log(result); 

您可以嘗試使用filter

 var names = ["john", "sarah", "dennis"]; var emails = ["john.doe@gmail.com", "william.iron@gmail.com", "bruce.lee@example.com"]; var result = emails.filter(email => !names.find(name => email.includes(name))); console.log(result); 

您可以結合使用Array.filter()Array.find()

 var names = ["john", "sarah", "dennis"]; var emails = ["john.doe@gmail.com", "william.iron@gmail.com", "bruce.lee@example.com"]; var res = emails.filter(email => !names.find(name => email.includes(name))); console.log(res); 

如果您還擔心IE瀏覽器,那么請使用簡單的函數聲明,而不要使用includes()使用indexOf()

 var names = ["john", "sarah", "dennis"]; var emails = ["john.doe@gmail.com", "william.iron@gmail.com", "bruce.lee@example.com"]; var res = emails.filter(function(email) { return !names.find(function(name) { return (email.indexOf(name) !== -1); }); }) console.log(res); 

使用array.prototype.filterarray.prototype.somestring.prototype.includes

 var names = ["john", "sarah", "dennis"]; var emails = ["john.doe@gmail.com", "william.iron@gmail.com", "bruce.lee@example.com"]; var res = emails.filter(email => !names.some(name => email.includes(name))); console.log(res); 

你可以試試這個

 var names = ["john", "sarah", "dennis"]; var emails = ["john.doe@gmail.com", "william.iron@gmail.com", "bruce.lee@example.com"]; const result = emails.filter(email => { let nameInMail = true names.forEach(name => { if (!nameInMail) { return } nameInMail = !(email.indexOf(name) >= 0) }) return nameInMail }) console.log(result) 

編輯:其他答案比我的更好哈哈使用.some()看起來是最好的方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM