首页 > 解决方案 > 如何在 JavaScript 的字符串数组中有效地查找包含另一个字符串的组字符串?

问题描述

对于像这样的数组:

["abc", "bc", "dd", "d", "ee", "ff", "e"] 

什么是获得的有效方法:

[["abc", "bc"],["dd", "d"],["ee", "e"]]

解释

["abc", "bc"] because "abc" contains "bc" 
["dd", "d"] because "dd" contains "d"
["ee", "e"] because "ee" contains "e"

包括并行性在内的任何新方法也受到欢迎。

标签: javascriptalgorithm

解决方案


您可以使用reduce(). 检查该元素是否被其他元素包含。如果没有,则将其添加为累加器的键。如果包含,则将其添加到该数组中。最后用于Object.values()获取值(数组)。用于filter()删除具有length = 1

let arr = ["abc", "bc", "dd", "d", "ee", "ff", "e"] 

let res = Object.values(arr.reduce((ac,a,i) => {
  
  if(!arr.some((x,b) => x.includes(a) && i !== b)) ac[a] = [a];
  else {
    for(let k in ac){
      if(k.includes(a)){
        ac[k].push(a)
        break;
      }
      
    }
  }
  return ac;

},{})).filter(x => x.length -1)

console.log(res)


推荐阅读