首页 > 解决方案 > 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,但我不知道如何开始。

标签: javascript

解决方案


您可以使用数组.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)


推荐阅读