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

确认匹配的结束布尔问题(JavaScript),javascript,arrays,string,boolean,Javascript,Arrays,String,Boolean,我试图创建一个函数,该函数在不使用.endsWith()的情况下,如果字符串的结尾与给定变量相同,则返回该函数 我不知道这为什么不起作用。Chaining.join(“”)并将两个值作为字符串进行比较,但不能作为数组进行比较 const confirmEnding = (str, target) => { // split string into array, splice end of array based on target length console.log(str.split(

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

我不知道这为什么不起作用。Chaining.join(“”)并将两个值作为字符串进行比较,但不能作为数组进行比较

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?

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

const confirminding=(str,target)=>{
var indexOfTarget=str.lastIndexOf(目标);
var lastStr=str.substr(indexOfTarget,str.length-1);
如果(lastStr==目标){
返回true;
}
返回false;
};
//匹配
console.log(确认(“祝贺”、“开启”);
//匹配
控制台日志(确认(“祝贺”、“祝贺”);
//没有对手

控制台日志(确认(“祝贺”、“祝贺”)不能比较具有相同内容但具有不同对象引用的两个数组。您需要使用一个计数器来比较该项,该计数器用于从字符串末尾开始迭代的相等结尾的字符

const confirminding=(str,target)=>{
var i=0;
而(i控制台日志(确认(“祝贺”、“关闭”)不能比较具有相同内容但具有不同对象引用的两个数组。你需要比较这个项目。你应该阅读这个问题及其答案。我不知道数组不能像原始数据类型那样进行比较。一点帮助:
A=[1,2,3];b=[1,2,3];console.log(a==a);/*true*/console.log(a==b);/*false*/
:-)您没有回答问题:“为什么布尔值返回false?”@leaf我理解您的评论,但我更愿意建议一个更好的答案,尽管给出了答案的原因,但该答案并不更适合于实现OP想要实现的目标。然后是不连贯的:-P