slice、splice、substr、substring

86 阅读2分钟

Array.slice(?start, ?end)

返回一个新数组,不影响老数组,start和end均支持负值,会转换成arr.length + start/end不支持自动交换顺序,不传end,默认end为length,当end<start时不会自动替换start和end顺序,会返回空数组。
const arr = [1,2,3,4,5];
arr.slice(1); // [2,3,4,5];
arr.slice(1,3); // [2,3];
arr.slice(-3); // [3,4,5];
arr.slice(-3,-1); // [3,4];
arr.slice(-1,-3); // [];

Array.splice(start, ?deleteCount, ...items)

在原数组上修改,会影响原数组,返回值是截取的数组,支持3个参数,第一个参数是开始切换的位置,第二个参数是移除元素的数量,第三个参数以后是替换的新元素,支持多个参数或数组解构的形势。start支持负数,同样会转换为arr.length + start。 const arr = [1,2,3,4,5];
arr.splice(1); // [2,3,4,5]; arr = [1]
arr.splice(1,3); // [2,3,4] arr = [1,5];
arr.splice(-4,1); // [2] arr = [1,3,4,5];
arr.splice(-4,-1); // [] arr = [1,2,3,4,5];
arr.splice(1,1,100); // [2] arr = [1,100,3,4,5];
arr.splice(1,1,100,200); // [2] arr = [1,100,200,3,4,5];
arr.splice(1,1,...[100,200,300]); // [2] arr = [1,100,200,300,3,4,5];

String.slice(?start, ?end)

String 和 Array 的slice相似,均支持负值,不影响原字符串 const str = 'abcde';
str.slice(1); // bcde;
str.slice(1,3); // bc;
str.slice(-3); // cde;
str.slice(-3,-1); // cd;
str.slice(-1,-3); // '';

String.substr(from, length)

针对字符串的操作都不会影响原字符串,from支持负值,length不支持负值。 const str = 'abcde';
str.substr(); // abcde str.substr(1); // bcde;
str.substr(1,3); // bcd;
str.substr(-4); // bcde;
str.substr(-4,-1); // '';
str.substr(-1,5); // e;

String.substring(start, ?end)

针对字符串的操作都不会影响原字符串,start和end均支持负值,负值会被自动转换成0,然后与另一个值比较,会进行自动转换,小的值会变成start,大的值为end,保持start<end。 const str = 'abcde';
str.substring(); // abcde str.substring(1); // bcde;
str.substring(1,3); // bc;
str.substring(-4); // abcde;
str.substring(-4,-1); // '';
str.substring(-1,5); // abcde;
str.substring(5, -1); // abcde;\