侧边栏壁纸
  • 累计撰写 237 篇文章
  • 累计创建 289 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

JavaScript数组专题之2:数组的增删改全解析(push、pop、splice)

DGF
DGF
2025-09-21 / 0 评论 / 0 点赞 / 0 阅读 / 0 字

JS 数组系列专题文章目录

入门篇

第 1 篇:认识 JavaScript 数组——从入门到操作基础
👉 介绍数组的概念、创建方式、索引与长度的使用,以及最基础的遍历方法。适合刚接触数组的新手。

第 2 篇:数组的增删改全解析(push、pop、splice)
👉 系统讲解数组的增删改方法,包括 pushpopshiftunshiftsplicefill,并结合小案例说明。

常用方法篇

第 3 篇:数组的查找与判断方法大全
👉 详细介绍如何在数组中查找元素,包括 indexOflastIndexOfincludesfindfindIndexsomeevery 等。

第 4 篇:数组的排序与合并技巧(sort、concat、slice)
👉 讲解数组排序与反转的方法,以及合并、切片、字符串化的常见操作,重点讲解 sort 排序中的注意点。

进阶篇

第 5 篇:数组的迭代与转换(map、filter、reduce 全解)
👉 深入剖析高阶方法 mapfilterreduce,包括实际应用场景:数组求和、数据统计、扁平化处理等。

第 6 篇:数组的实用技巧与案例集锦
👉 介绍常见的数组处理技巧:去重(多种写法对比)、扁平化(flat 与递归实现)、字符串与数组互转、对象数组排序。

高阶篇

第 7 篇:类数组与稀疏数组——容易忽略的细节
👉 解释什么是类数组(argumentsNodeList),如何转换为真数组,稀疏数组的特性和坑点。

第 8 篇:不可变数组操作与函数式编程思路
👉 如何在不修改原数组的前提下进行操作(扩展运算符、concatmap 等),结合函数式编程的思想讲解。

实战 & 面试篇

第 9 篇:手写数组常用方法(map、filter、reduce)
👉 从源码角度模拟实现常见数组方法,帮助加深理解,提升面试竞争力。

第 10 篇:数组实战应用与高频面试题精选
👉 总结数组在实战中的应用:两数之和、数组旋转、最大最小值查找、groupBy、分页实现,涵盖面试常考题。

在编程世界中,数组(Array)就像一个有序的容器,用来存放多个数据项。它是几乎所有编程语言中最基础的数据结构之一。想象一下,你有一个购物篮,可以往里面放东西(增)、拿走东西(删)、换掉里面的东西(改),或者找找里面有没有某个东西(查)。这些操作统称为“增删改查”(CRUD:Create, Read, Update, Delete),是处理数组的核心技能。

先回顾一下前面一篇讲的基本概念

温故而知新:
JavaScript数组专题之1:认识 JavaScript 数组——从入门到操作基础

数组的基本概念

首先,什么是数组?数组是一个有序集合,可以存储多个值,这些值可以是数字、字符串、对象,甚至其他数组。数组的元素通过索引(从 0 开始的数字)来访问。

  • 创建数组:在 JavaScript 中,用方括号 [] 创建空数组,或直接初始化。

    let fruits = [];  // 空数组
    let numbers = [1, 2, 3, 4];  // 初始化数组
    
  • 长度:数组有 length 属性,表示元素个数。

    console.log(numbers.length);  // 输出: 4
    
  • 访问元素:用索引访问,比如 numbers[0] 是 1。注意,索引从 0 开始,最后一个是 length - 1

数组是动态的(JavaScript 中数组大小可变),但有些语言如 C++ 的数组是固定大小的。这里我们聚焦动态数组。

现在,让我们进入正题:增删改查。

增:向数组添加元素

“增”操作往数组添加新元素,常见于添加新数据。以下是相关方法。

1. push:末尾添加

  • 用途:将元素添加到数组末尾,像在购物清单最后加一项。
  • 时间复杂度:O(1)(高效,末尾操作不影响其他元素)。
  • 代码示例
    let shoppingList = ['apple', 'banana'];
    shoppingList.push('orange');
    console.log(shoppingList); // 输出: ['apple', 'banana', 'orange']
    
  • 注意:可一次添加多个元素:shoppingList.push('pear', 'grape')
  • 案例:在购物清单末尾添加“牛奶”。
    shoppingList.push('milk');
    console.log(shoppingList); // 输出: ['apple', 'banana', 'orange', 'milk']
    

2. unshift:开头添加

  • 用途:将元素添加到数组开头,像在清单最前面插队。
  • 时间复杂度:O(n)(n 是数组长度,因需移动所有元素)。
  • 代码示例
    let shoppingList = ['apple', 'banana'];
    shoppingList.unshift('strawberry');
    console.log(shoppingList); // 输出: ['strawberry', 'apple', 'banana']
    
  • 注意:大数组用 unshift 较慢,谨慎使用。
  • 案例:优先购买“面包”,加到清单开头。
    shoppingList.unshift('bread');
    console.log(shoppingList); // 输出: ['bread', 'strawberry', 'apple', 'banana']
    

3. splice:任意位置添加

  • 用途:在指定索引插入元素,灵活性高。
  • 时间复杂度:O(n)(可能需移动元素)。
  • 语法splice(index, deleteCount, ...items),deleteCount 设为 0 表示只插入。
  • 代码示例
    let shoppingList = ['apple', 'banana', 'orange'];
    shoppingList.splice(1, 0, 'mango'); // 在索引 1 插入 'mango'
    console.log(shoppingList); // 输出: ['apple', 'mango', 'banana', 'orange']
    
  • 注意:可插入多个元素。
  • 案例:在“苹果”后添加“葡萄”。
    shoppingList.splice(1, 0, 'grape');
    console.log(shoppingList); // 输出: ['apple', 'grape', 'mango', 'banana', 'orange']
    

删:移除数组元素

“删”操作移除元素,调整清单内容。以下是删除方法。

1. pop:删除末尾元素

  • 用途:移除数组最后一个元素,返回被移除元素。
  • 时间复杂度:O(1)(高效)。
  • 代码示例
    let shoppingList = ['apple', 'banana', 'orange'];
    let removed = shoppingList.pop();
    console.log(shoppingList); // 输出: ['apple', 'banana']
    console.log(removed); // 输出: 'orange'
    
  • 注意:空数组 pop 返回 undefined,不报错。
  • 案例:移除清单末尾的“牛奶”(买完了)。
    shoppingList.pop();
    console.log(shoppingList); // 输出: ['apple', 'grape', 'mango', 'banana']
    

2. shift:删除开头元素

  • 用途:移除数组第一个元素,返回被移除元素。
  • 时间复杂度:O(n)(需移动元素)。
  • 代码示例
    let shoppingList = ['apple', 'banana', 'orange'];
    let removed = shoppingList.shift();
    console.log(shoppingList); // 输出: ['banana', 'orange']
    console.log(removed); // 输出: 'apple'
    
  • 注意:大数组慎用。
  • 案例:买完“面包”,从清单开头移除。
    shoppingList.shift();
    console.log(shoppingList); // 输出: ['grape', 'mango', 'banana']
    

3. splice:删除任意位置元素

  • 用途:从指定索引删除若干元素,返回删除的元素数组。
  • 时间复杂度:O(n)。
  • 代码示例
    let shoppingList = ['apple', 'banana', 'orange', 'pear'];
    let removed = shoppingList.splice(1, 2); // 从索引 1 删除 2 个
    console.log(shoppingList); // 输出: ['apple', 'pear']
    console.log(removed); // 输出: ['banana', 'orange']
    
  • 注意:deleteCount 为 0 时不删除。
  • 案例:移除清单中的“芒果”和“香蕉”。
    shoppingList.splice(1, 2);
    console.log(shoppingList); // 输出: ['grape']
    

改:更新数组元素

“改”操作更新元素值,调整清单内容。

1. 直接赋值:修改指定索引

  • 用途:通过索引直接改元素值,最简单。
  • 时间复杂度:O(1)。
  • 代码示例
    let shoppingList = ['apple', 'banana', 'orange'];
    shoppingList[1] = 'mango';
    console.log(shoppingList); // 输出: ['apple', 'mango', 'orange']
    
  • 注意:索引越界会扩展数组,填充 undefined。
  • 案例:将“葡萄”改为“蓝莓”。
    shoppingList[0] = 'blueberry';
    console.log(shoppingList); // 输出: ['blueberry']
    

2. splice:替换元素(是多面手,可增删改结合)

  • 用途:删除并插入,实现替换。
  • 时间复杂度:O(n)。
  • 代码示例
    let shoppingList = ['apple', 'banana', 'orange'];
    shoppingList.splice(1, 1, 'mango'); // 替换索引 1 的元素
    console.log(shoppingList); // 输出: ['apple', 'mango', 'orange']
    
  • 案例:将“蓝莓”替换为“草莓”。
    shoppingList.splice(0, 1, 'strawberry');
    console.log(shoppingList); // 输出: ['strawberry']
    

3. fill:填充元素(适合批量设置值)

  • 用途:用固定值填充数组的部分或全部。
  • 时间复杂度:O(n)。
  • 语法fill(value, start, end),end 不包含。
  • 代码示例
    let shoppingList = ['apple', 'banana', 'orange'];
    shoppingList.fill('fruit', 1, 3); // 从索引 1 到 2 填充 'fruit'
    console.log(shoppingList); // 输出: ['apple', 'fruit', 'fruit']
    
  • 注意:常用于初始化,如全填 0。
  • 案例:将清单后两项标记为“已购买”。
    shoppingList.fill('purchased', 1, 3);
    console.log(shoppingList); // 输出: ['apple', 'purchased', 'purchased']
    

小案例:管理购物清单

假设我们要管理一个购物清单,综合运用上述方法:

let shoppingList = ['apple', 'banana'];

// 增:在末尾加“橙子”,开头加“面包”,索引 1 后加“葡萄”
shoppingList.push('orange');
shoppingList.unshift('bread');
shoppingList.splice(2, 0, 'grape');
console.log(shoppingList); // 输出: ['bread', 'apple', 'grape', 'banana', 'orange']

// 删:移除末尾的“橙子”,开头的“面包”,索引 2 的“香蕉”
shoppingList.pop();
shoppingList.shift();
shoppingList.splice(2, 1);
console.log(shoppingList); // 输出: ['apple', 'grape']

// 改:将“苹果”改为“草莓”,将“葡萄”标记为“已购买”
shoppingList[0] = 'strawberry';
shoppingList.fill('purchased', 1, 2);
console.log(shoppingList); // 输出: ['strawberry', 'purchased']

预告

下一篇,我们要聊聊数组的 查找与判断

  • 怎么快速找到某个元素?

  • 怎么判断数组里有没有它?

  • 怎么检查是不是所有元素都符合要求?

提示:这就像在班级里点名找人一样。敬请期待! 🎉

0

评论区