Javascript Slice 方法及其示例

Javascript Slice 方法及其示例
最新回答
鸾月

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 arr = [1, 2, 3, 4, 5];// 无参数:复制整个数组console.log(arr.slice()); // [1, 2, 3, 4, 5]// 单参数:从指定索引到末尾console.log(arr.slice(2)); // [3, 4, 5]console.log(arr.slice(-2)); // [4, 5]// 双参数:从 start 到 end(不包括 end)console.log(arr.slice(1, 4)); // [2, 3, 4]console.log(arr.slice(-3, -1)); // [3, 4]// 特殊情况console.log(arr.slice(3, 1)); // [](start > end)console.log(arr.slice(10)); // [](start 超出数组长度)稀疏数组

稀疏数组中的空项也会被复制:

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"关键点总结
  1. 不修改原对象:slice() 返回新数组或字符串,原对象不变。
  2. 负索引:支持从末尾计数的负索引。
  3. 范围规则:结束索引不包括在内(左闭右开区间)。
  4. 稀疏处理:数组中的空项会被保留。
  5. 字符串操作:与数组切片行为一致,但操作字符。
实际应用场景
  • 提取数组或字符串的子序列。
  • 创建数组或字符串的浅拷贝。
  • 处理函数参数列表(如 arguments 对象转数组)。
  • 字符串操作(如获取文件扩展名、截取特定部分)。

通过灵活使用 slice(),可以高效地处理数据子集,避免直接修改原对象,符合函数式编程的原则。