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

确认字符串结尾函数问题咨询:自定义代码为何始终返回false?

问题分析与修复方案

嘿,我来帮你拆解下这段代码为啥总是返回false~你的思路方向是对的,但有几个关键细节没处理好:

1. 数组不能直接用==比较(最核心的问题)

在JavaScript里,数组是引用类型,==或者===比较的是两个数组的内存地址,而不是它们的内容。哪怕两个数组里的元素完全一样,只要是不同的数组对象,结果都是false。比如:

console.log(["a","b"] == ["a","b"]); // 输出 false

所以你最后写的return ending==targetArray不管ending内容对不对,都会返回false,这是最直接的原因。

2. ending数组的构建逻辑冗余且有漏洞

你原本想通过push字符或0来记录匹配结果,但其实完全不需要构建这个数组:

  • 只要有一个字符不匹配,我们可以直接提前返回false,不用继续循环
  • 就算全匹配,构建数组再比较也是多此一举,还容易出错

3. 字符串转数组是没必要的操作

JavaScript里字符串本身就可以通过索引直接访问字符(比如str[0]),不需要先转成数组,这会额外增加性能开销。


修复后的代码(遵循你的思路优化)

我们可以直接在循环里逐位比较,一旦发现不匹配就返回false,全匹配则返回true:

function confirmEnding(str, target) {
  // 先判断str长度是否小于target,直接返回false
  if (str.length < target.length) return false;
  // 计算str需要开始比较的起始位置
  const startIndex = str.length - target.length;
  // 逐位比较target和str对应位置的字符
  for (let i = 0; i < target.length; i++) {
    if (str[startIndex + i] !== target[i]) {
      return false;
    }
  }
  return true;
}

更简洁的写法(利用JS内置方法)

其实JavaScript字符串有更方便的slice方法,直接截取str的最后target.length位和target比较就行了:

function confirmEnding(str, target) {
  return str.slice(-target.length) === target;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:23:08