当前位置:首页 > JavaScript

实现 slice JS

2026-01-31 19:15:16JavaScript

实现 JavaScript 的 slice 方法

JavaScript 的 slice 方法用于从数组或字符串中提取一部分,返回一个新的数组或字符串,而不修改原始数据。以下是实现 slice 的核心逻辑和注意事项。

实现 slice JS

数组的 slice 实现

function slice(array, start, end) {
  const length = array == null ? 0 : array.length;
  if (!length) {
    return [];
  }

  start = start == null ? 0 : start;
  end = end === undefined ? length : end;

  if (start < 0) {
    start = -start > length ? 0 : length + start;
  }
  if (end < 0) {
    end = -end > length ? 0 : length + end;
  }

  const result = [];
  for (let i = start; i < end && i < length; i++) {
    result.push(array[i]);
  }
  return result;
}
  • 参数处理startend 可以是负数,表示从末尾开始计算的位置。
  • 边界检查:确保 startend 在合理范围内,避免越界访问。
  • 结果生成:通过循环将指定范围的元素添加到新数组中。

字符串的 slice 实现

function sliceString(str, start, end) {
  const length = str == null ? 0 : str.length;
  if (!length) {
    return '';
  }

  start = start == null ? 0 : start;
  end = end === undefined ? length : end;

  if (start < 0) {
    start = -start > length ? 0 : length + start;
  }
  if (end < 0) {
    end = -end > length ? 0 : length + end;
  }

  let result = '';
  for (let i = start; i < end && i < length; i++) {
    result += str[i];
  }
  return result;
}
  • 逻辑类似数组:处理负数索引和边界条件的方式与数组一致。
  • 字符串拼接:通过循环拼接字符生成子字符串。

注意事项

  • 性能优化:现代 JavaScript 引擎已对原生 slice 做了高度优化,手动实现的版本可能性能较差。
  • 类型检查:原生 slice 会检查调用者是否为数组或字符串,手动实现时可根据需要添加类型校验。
  • 稀疏数组:原生 slice 会跳过稀疏数组的空位,手动实现时需额外处理。

以上代码提供了 slice 方法的核心功能实现,可根据实际需求进一步扩展或优化。

标签: sliceJS
分享给朋友:

相关文章

JS实现文本的删除

JS实现文本的删除

使用 substring() 方法 通过指定起始和结束索引截取字符串的一部分,间接实现删除效果。 let str = "Hello World"; let newStr = str.substr…

JS能实现跨平台吗

JS能实现跨平台吗

JavaScript 的跨平台能力 JavaScript 是一种高度灵活的脚本语言,通过不同运行时环境和工具链可以实现跨平台开发。以下是其跨平台能力的核心实现方式: 浏览器环境 JavaScript…

动态实现JS

动态实现JS

动态实现 JavaScript 的方法 动态加载脚本 通过创建 script 元素并插入到 DOM 中实现动态加载。例如: const script = document.createEleme…

JS实现inpubox

JS实现inpubox

实现 InputBox 的基本结构 使用 HTML 和 CSS 创建一个基础的输入框结构,确保样式简洁且易于扩展。 <div class="input-box"> <input…

JS实现并发请求

JS实现并发请求

使用Promise.all实现并发请求 Promise.all可以同时发起多个异步请求,并在所有请求完成后统一处理结果。该方法适用于需要同时获取多个独立数据的场景。 const urls = ['u…