如何删除JavaScript数组中已被更长项包含的短字符串元素
实现方案
核心思路
- 你已经完成的按长度降序排序是核心前提,保证遍历的时候更长的元素优先进入结果集
- 维护结果数组,遍历排序后的元素时,仅检查当前元素是否被结果集中长度更长的元素包含:
- 是则丢弃当前短元素
- 否则保留(长度相同的完全匹配元素会全部保留,符合需求)
完整代码
const items = ['Knowledge base', 'base', 'management', 'knowledge management', 'Knowledge', 'knowledge', 'knowledge management'] // 按长度降序排序,长元素在前 const sortedItems = items.sort((a,b) => b.length - a.length) const result = [] for (const item of sortedItems) { // 检查是否有更长的已保留元素包含当前元素 const isContained = result.some(el => el.length > item.length && el.includes(item)) if (!isContained) { result.push(item) } } console.log(result) // 输出:['knowledge management', 'knowledge management', 'Knowledge base'],元素和需求完全一致,可自行调整排序规则匹配预期顺序
可选调整
如果需要不区分大小写判断包含关系,把判断条件改为:
const isContained = result.some(el => el.length > item.length && el.toLowerCase().includes(item.toLowerCase()))
内容的提问来源于stack exchange,提问作者Denis Omerovic
相关产品推荐
相关产品推荐

