[英]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.filter
, array.prototype.some
和string.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.