簡體   English   中英

Javascript篩選出數組中的子字符串元素

[英]Javascript filter out substring elements in an array

有沒有一種方法,理想情況下使用高階函數來過濾出數組中重復的子字符串元素? 例如:

var obj = ["a", "a.b.c", "a.b", "a.e", "a.b.d"]

成為

["a.b.c", "a.e", "a.b.d"] //since both "a" and "a.b" appear inside either "a.b.c" or "a.b.d".

該解決方案可能需要哈希表或集,但是我不確定如何開始。

您可以使用array .reduce函數執行此操作。

只要看看您當前的字符串是否是數組中已經存在的子字符串,就可以忽略它。 否則,如果數組中的某些內容是當前字符串的子字符串,請替換它。 最后,如果不是這樣,則將當前字符串添加到數組中:

 var obj = ["a", "abc", "ab", "ae", "abd"] var result = obj.reduce((deduped, item) => { if (deduped.some(s => s.includes(item))) return deduped; const replace = deduped.findIndex(s => item.includes(s)); if (replace !== -1) { deduped.splice(replace, 1, item) } else { deduped.push(item) } return deduped; }, []); console.log(result) 

一個替代方案是使用函數filter ,以獲得所需的元件,功能some檢查至少一個匹配和功能includes ,以檢查是否當前元素是子串。

此方法找到一個子字符串來標識匹配項。

 var obj = ["a", "abc", "ab", "ae", "abd"], filtered = obj.filter((element, i, arr) => !arr.some((o, oi) => { return oi === i ? false : o.includes(element); })); console.log(filtered); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

可以使用filter()find()組合以及Set來刪除重復項

 var data = ["a", "abc", "ab", "ae", "abd"]; var res = [...new Set(data)].filter(val => !data.find(s => s !== val && s.startsWith(val))); console.log(res) 

暫無
暫無

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

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