You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何优化数组相似度检测?哈希数组段落去重逻辑修复求助

嘿,你的问题出在filter里的判断逻辑上——原代码里的paragraph[index].includes(paragraph[0])完全是个逻辑错误,paragraph是当前遍历到的字符串,paragraph[index]取的是这个字符串的第index个字符,这根本不是你想要的「检查当前段落是否被其他段落包含」的逻辑!

咱们把逻辑改对就行,核心思路是:对每个段落,判断数组里有没有其他段落完整包含它,如果有就过滤掉,没有就保留。修正后的链式调用代码如下:

const description = hotel
  .description()
  .map(descriptions => descriptions.paragraph)
  .filter((currentPara, _, allParas) => {
    // 检查是否存在其他段落包含当前段落
    return !allParas.some(para => para !== currentPara && para.includes(currentPara));
  });

我来拆解下这段代码的逻辑:

  • filter的第三个参数allParas拿到了整个段落数组的引用,这样我们能遍历所有元素做对比
  • some方法会遍历数组,只要找到任意一个不是当前段落的元素,并且这个元素包含当前段落,就返回true
  • 我们用!取反,意思就是:如果没有其他段落包含当前段落,就保留它

来验证两种场景:

  1. 前缀相似的情况:["Welcome to the best place", "Welcome to the best place in the world, Boston!"]
    • 第一个段落被第二个包含,some返回true,取反后是false,所以被过滤;第二个段落没有被其他元素包含,会被保留,结果符合预期
  2. 所有段落互不包含的情况:["You are here at the best place", "Welcome to the best place in the world, Boston!"]
    • 两个段落都不被对方包含,some返回false,取反后是true,所以两个都保留,完美符合你的需求

这样修改后,不管有没有相似的段落,都能得到正确的结果啦!

内容的提问来源于stack exchange,提问作者Rembrandt Reyes

火山引擎 最新活动