javascript - Javascript过滤掉数组中的子字符串元素
问题描述
有没有办法(理想情况下使用高阶函数)过滤掉数组中重复的子字符串元素?例如:
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".
该解决方案可能需要 Hashtables 或 Sets,但我不知道如何开始。
解决方案
您可以使用数组.reduce
函数来执行此操作。
只需查看您当前的字符串是否是数组中已有内容的子字符串,如果是则忽略它。否则,如果数组中的某些内容是当前字符串的子字符串,则替换它。最后,如果两者都不是,则将当前字符串添加到数组中:
var obj = ["a", "a.b.c", "a.b", "a.e", "a.b.d"]
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)
推荐阅读
- apache-camel - Camel-Cdi 没有使用 Registery 注入 CamelContext
- ios - UINavigationController 交互式弹出手势仅在第一次工作
- javascript - 动态读取下拉列表中的选定值
- angular - 构建角度应用程序后,在角度中加载失败的 inline.318b50c57b4eba3d437b.bundle.js
- python - 是否有任何选项可以从 python 中的数组元素创建多个 dict
- java - 部署程序集配置不适用于 mvn 包
- python-3.x - Pandas 数据框按列名上的函数合并
- python - 如果找到分隔符,则拆分字符串
- playframework - 播放 2.4 Global.java onStart 多次调用
- excel - 使用 Excel 并行填充多个 IE WebForms