欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

字符串与数组

程序员文章站 2024-02-24 22:17:16
...

substring、slice和substr

也是一道经典面试题(虽然人家没问过我)

var str = "I am 一个好人";

str.substring(2,7);//am 一个
str.substr(2,7);//am 一个好人
str.substr(2,10);//am 一个好人
str.slice(2,7);//am 一个

str.substring(2,-2);//am 一个好人(这是错误答案)  “I "(这是正确答案) 
str.substr(2,-2);//空
str.slice(2,-2);//am 一个

str.substring(-2,3);//I a
str.substr(-2,3);//好人
str.slice(-2,3);//"好个一 "(这是错误答案) 空(才是正确答案,因为-2相当于7)

str.slice(-2,8);//好

上面的错误答案就是我踩过的坑字符串与数组

一般问题都会把substring和substr放在一起(毕竟都是字符串的方法),但为了记好他们仨的参数,substring与slice一样参数都为(start,end),我决定把substring与slice放到一起。但他俩也有不同,当substring接收到两个参数时,它会先把两个参数比大小,小的作为第一个参数,大的作为第二个参数;如果其中一个参数是负数,它会将其直接赋成0,多么简单粗暴啊。

substring是以两个参数中较小一个作为起始位置,较大的参数作为结束位置,所以str.substring(2,-2)变成了str.substring(-2,2);又因为substring干脆将负参数都直接转换为0,所以实际上这句话是str.substring(0,2)。

slice的话就比较正常啦~没什么比大小也没什么赋值为0的乱七八糟,但是如果是end比start靠前,他就都会报“空”,所以str.slice(-2,3)就好理解了,抽取字符串的顺序永远是从左往右(╯‵□′)╯︵┻━┻

最后一个说说与众不同的substr,当接收的参数有负数时,substr则仅仅是将第一个参数与字符串长度相加后的结果作为第一个参数。所以str.substr(2,-2)相当于str.substr(11,-2)。so只要第二个参数为负它就永远返回“空”

slice和splice

slice(start,end)不改变原数组,返回改变后的数组。

var a = [2,3,4];
var b = a;
a = a.slice(1,2);
console.log(a);//[3]
console.log(b);//[2,3,4]

splice(start,howmany,item1,item2……)改变原数组,返回被删除的项目。 

var a = [2,3,4];
var b = a;
a.splice(1,2,666);
console.log(a);//[2, 666]
console.log(b);//[2, 666]

reverse

array.reverse()改变原数组,返回新数组。

var array1 = ['one', 'two', 'three'];
var reversed = array1.reverse(); 
console.log('reversed: ', reversed);//Array ['three', 'two', 'one']
console.log('array1: ', array1);//['three', 'two', 'one']

concat

array.concat(item1,item2……)不改变原数组,返回新数组。

var array1 = ['a', 'b', 'c'];
var array2 = ['d', 'e', 'f'];
console.log(array1.concat(array2));//["a", "b", "c", "d", "e", "f"]
console.log(array1);//Array ["a", "b", "c"]

 

相关标签: 字符串 数组