You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现筛选并排序数组中为另一数组元素子串的元素?代码调试求助

Codewars Kata 问题排查

这是来自codewars的Kata练习:给定两个字符串数组a1和a2,返回按字典序排序的数组r,r中的元素是a1中属于a2某一元素子串的字符串。

示例1:

a1 = ["arp", "live", "strong"]
a2 = ["lively", "alive", "harp", "sharp", "armstrong"]

返回 ["arp", "live", "strong"]

示例2:

a1 = ["tarp", "mice", "bull"]
a2 = ["lively", "alive", "harp", "sharp", "armstrong"]

返回 []

以下是我目前编写的代码,怀疑第4行的if (a2.includes(a1[i]))存在问题,请求帮助排查:

function inArray(a1,a2){
  let r =[];
  for (let i =0; i> a1.length; i++){
    if (a2.includes(a1[i])){
      r.push(a1[i])
    }
  }
  r = r.sort()
  return r
}

问题排查与修正

  • 循环条件完全写反
    第3行的i > a1.length是错误的,循环永远不会执行——初始i是0,0不可能大于数组长度,直接导致返回空数组。正确条件应该是i < a1.length。

  • 子串判断逻辑错误
    a2.includes(a1[i])是判断a1的元素是否是a2数组里的完整成员,但题目要求的是a1元素是a2中某个元素的子串(比如"arp"是"harp"的子串,但不是a2的直接元素)。要实现正确判断,应该检查a2中是否存在任意字符串包含当前a1元素,用a2.some(str => str.includes(a1[i]))替代原判断。

修正后的代码

function inArray(a1,a2){
  let r = [];
  for (let i = 0; i < a1.length; i++){
    if (a2.some(str => str.includes(a1[i]))){
      r.push(a1[i]);
    }
  }
  r.sort();
  return r;
}

也可以用更简洁的链式写法:

function inArray(a1,a2){
  return a1.filter(str => a2.some(item => item.includes(str))).sort();
}

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 19:10:29