当前位置:首页 > JavaScript

实现 slice JS

2026-04-05 11:31:50JavaScript

实现 JavaScript 的 slice 方法

JavaScript 的 slice 方法用于从数组中提取一部分元素,返回一个新数组,而不修改原数组。以下是实现 slice 方法的详细步骤:

基本功能实现

slice 方法接受两个参数:startend(可选),表示提取的起始和结束位置(不包括 end)。实现时需处理负数索引和默认值。

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;

  // 处理负数索引
  start = start < 0 ? Math.max(length + start, 0) : Math.min(start, length);
  end = end < 0 ? Math.max(length + end, 0) : Math.min(end, length);

  const result = [];
  for (let i = start; i < end; i++) {
    result.push(array[i]);
  }
  return result;
}

边界条件处理

  • 如果 startend 为负数,将其转换为从数组末尾开始的索引。
  • 如果 startend 超出数组长度,将其限制在有效范围内。
  • 如果 start 大于 end,返回空数组。

示例测试

const arr = [1, 2, 3, 4, 5];
console.log(slice(arr, 1, 3)); // [2, 3]
console.log(slice(arr, -2));   // [4, 5]
console.log(slice(arr, 2, 10)); // [3, 4, 5]

扩展为原型方法

若需将 slice 实现为数组的原型方法,可直接扩展 Array.prototype

实现 slice JS

Array.prototype.mySlice = function(start, end) {
  const length = this.length;
  start = start == null ? 0 : start;
  end = end === undefined ? length : end;

  start = start < 0 ? Math.max(length + start, 0) : Math.min(start, length);
  end = end < 0 ? Math.max(length + end, 0) : Math.min(end, length);

  const result = [];
  for (let i = start; i < end; i++) {
    result.push(this[i]);
  }
  return result;
};

注意事项

  • 确保不修改原数组,始终返回新数组。
  • 处理稀疏数组时,未赋值的元素会以 undefined 形式返回。
  • 此实现不涉及深拷贝,若数组包含对象,新数组中的对象仍为引用。

标签: sliceJS
分享给朋友:

相关文章

JS实现哀悼

JS实现哀悼

实现网页哀悼效果的方法 通过CSS滤镜和全局样式调整,可以快速实现网页整体变灰的哀悼效果。以下是具体实现方式: document.addEventListener('DOMContentLoaded…

JS如何访问react内部的数据

JS如何访问react内部的数据

访问 React 组件内部数据的方法 在 React 中,组件内部的数据通常通过 state 或 props 管理。以下是几种常见的访问方式: 通过 state 访问数据 React 组件的内部状态…

JS能实现跨平台吗

JS能实现跨平台吗

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

JS实现ln

JS实现ln

在JavaScript中实现自然对数(ln)功能可以通过以下几种方式完成: 使用Math对象的原生方法 JavaScript内置的Math对象提供了Math.log()方法,该方法默认计算以自然对数…

JS实现勋章

JS实现勋章

实现动态勋章效果 使用CSS和JavaScript创建动态旋转勋章。HTML部分定义勋章容器,CSS设置样式和动画,JavaScript控制交互行为。 <div class="badge-co…

JS实现隐藏tr

JS实现隐藏tr

隐藏表格行(tr)的方法 在JavaScript中隐藏表格行(tr)可以通过多种方式实现,以下是几种常见方法: 方法1:修改style.display属性 // 通过ID获取行并隐藏…