2022-09-16 04:22:30
JavaScript 的 slice() 方法用于从数组或字符串中提取连续的子序列,返回一个新对象而不修改原对象。
数组切片(Array.prototype.slice)基本语法array.slice();array.slice(start);array.slice(start, end);参数说明start(可选):提取的起始索引。默认为 0。
正数:从数组开头开始计数。
负数:从数组末尾开始计数(例如,-1 表示最后一个元素)。
end(可选):提取的结束索引(不包括该索引的元素)。默认为数组长度。
正数:从数组开头开始计数。
负数:从数组末尾开始计数。
稀疏数组中的空项也会被复制:
const sparseArr = [1, , 3];console.log(sparseArr.slice(0, 2)); // [1, empty]高级用法:从参数列表创建数组// 方法1:使用剩余参数const createArray = (...args) => Array.prototype.slice.call(args);console.log(createArray(1, 2, 3)); // [1, 2, 3]// 方法2:使用 bindconst boundSlice = Function.prototype.call.bind(Array.prototype.slice);const createArray2 = (...args) => boundSlice(args);console.log(createArray2(1, 2, 3)); // [1, 2, 3]字符串切片(String.prototype.slice)基本语法string.slice();string.slice(start);string.slice(start, end);参数说明与数组切片类似,但操作的是字符串的字符。
示例const str = "Hello, World!";// 无参数:复制整个字符串console.log(str.slice()); // "Hello, World!"// 单参数:从指定索引到末尾console.log(str.slice(7)); // "World!"console.log(str.slice(-6)); // "World!"// 双参数:从 start 到 end(不包括 end)console.log(str.slice(0, 5)); // "Hello"console.log(str.slice(-6, -1)); // "World"关键点总结通过灵活使用 slice(),可以高效地处理数据子集,避免直接修改原对象,符合函数式编程的原则。