原题链接
检查一个字符串(str
)是否以指定的字符串(target
)结尾。
如果是,返回true;如果不是,返回false。解法如下:
function confirmEnding(str, target) {
// "Never give up and good luck will find you."
// -- Falcor
return str.substr(str.length - target.length) == target ? true : false;
}
confirmEnding("Bastian", "n");
说实话我是在其他人的博客看到别人的文章才知道用哪个方法来写的,substr(start,length),但是直接照搬对自己学习没什么作用,还是从基础写法写起先。
小白写法:
function confirmEnding(str, target) {
if(str.substr(str.length - target.length)==target){
return true;
}
else{
return false;
}
}
confirmEnding("Bastian", "n");
解析:
通过if语句判断条件是否符合,符合的话返回true,反之返回false,在if语句中利用substr()方法对字符串进行判断。substr(start,length)中,start和length分别是指截取字符串的开始位置和长度,那为什么是用的str.length - target.length当作start的值?emmm。。。str.length是指传入的str的字符串长度(就是被截取的那个字符串),target是指传入的target的字符串长度(说白了就是第二个参数的长度),至于为什么要用start减去length当截取字符串的开始位置,你不会想么真的是,这样得出来的值就是子串的开始位置下标啊。
ok,既然知道从哪开始截取了,那为什么不设置substr()函数的length值,这不是废话么,。。这道题说的就是判断末尾那几个字符是不是跟你给的第二个参数(就是target值)一致,因为substr()函数不设置length的话就是从截取位置直接截到最后,子串的长度等于length值,所以到str.substr(str.length - target.length)这里就已经能把题目要求的被截取字符串的末尾几个字符截出来了,接下来就是判断了。
substr()函数返回的值为字符串类型,将str.substr(str.length - target.length)的值拿去和传入的target值对比,如果两个值相等,即返回true,反之则为返回false。
进阶写法:
使用三元运算符来改动上面的代码
function confirmEnding(str, target) {
var a=str.substr(str.length - target.length) == target ? true : false;
return a;
}
confirmEnding("Bastian", "n");
代码没错,但是没必要定义一个新变量,可以直接返回str.substr(str.length - target.length) == target ? true : false;的值,故此将代码修改成下面这样
function confirmEnding(str, target) {
return str.substr(str.length - target.length) == target ? true : false;
}
confirmEnding("Bastian", "n");
将代码尽可能精简