确认匹配的结束布尔问题(JavaScript)

时间:2018-03-18 08:17:23

标签: javascript arrays string boolean

我尝试创建一个函数,如果字符串的结尾与给定变量相同而不使用.endsWith(),则返回该函数。

我不确定为什么这不起作用。链接。("")并将这两个值作为字符串进行比较,但不是数组。

const confirmEnding = (str, target) => {
// split string into array, splice end of array based on target length
console.log(str.split("").splice(str.length - target.length, target.length));
// split target into array
console.log(target.split(""));
// compare two arrays
return str.split("").splice(str.length - target.length, target.length) === target.split("");

console.log(confirmEnding("Congratulation", "on"));

输出

[ 'o', 'n' ]
[ 'o', 'n' ]
false

显然,阵列完全相同。为什么布尔值返回false?

2 个答案:

答案 0 :(得分:0)

您无法比较具有相同内容但具有不同对象引用的两个数组。您需要使用计数器来比较该项目,该计数器用于从字符串末尾开始等于重复的字符。

const confirmEnding = (str, target) => {
  var i = 0;
  while (i < target.length && str[str.length - 1 - i] === target[target.length - 1 - i]) {
      i++;
  }
  return i === target.length;
}

console.log(confirmEnding("Congratulation", "on"));
console.log(confirmEnding("Congratulation", "off"));

答案 1 :(得分:-1)

您可以更改逻辑以简化操作。只需从lastIndexOf获取target str字符串,这样您就可以获取最后一个字的子字符串并将其与target进行比较:

&#13;
&#13;
const confirmEnding = (str, target) => {
  var indexOfTarget = str.lastIndexOf(target);
  var lastStr = str.substr(indexOfTarget, str.length - 1);
  if(lastStr === target){
    return true;
  }
  return false;
};
//match
console.log(confirmEnding("Congratulation", "on"));
//match
console.log(confirmEnding("Congratulation", "tion"));
//no match
console.log(confirmEnding("Congratulation", "ons"));
&#13;
&#13;
&#13;