当前位置: 首页 > news >正文

JavaScript 所有操作数组的方法

JavaScript数组的所有方法中常见的包括修改原数组的方法(如push、pop、shift、unshift、splice、sort、reverse)、不修改原数组的方法(如concat、slice、join、map、filter、reduce等)、搜索和检查方法(如indexOf、find、includes、some、every)以及ES6新增的方法(如flat、flatMap、findIndex、fill等)。还有一些较新的方法如at(),以及如何转换类数组对象。

接下来我会通过案例,详细的讲解每个方法的具体用法。

一、修改原数组的方法

1.push()

作用:在数组末尾添加元素。

示例

const arr = [1, 2];
arr.push(3);        // arr → [1, 2, 3]
console.log(arr.push(4));  // 输出: 4(新长度)

2.pop()

作用:删除数组最后一个元素。

示例

const arr = [1, 2, 3];
const last = arr.pop(); // last → 3, arr → [1, 2]

3.shift()

作用:删除数组第一个元素。

示例

const arr = [1, 2, 3];
arr.shift(); // arr → [2, 3]

4.unshift()

作用:在数组头部添加元素。

示例

const arr = [2, 3];
arr.unshift(1); // arr → [1, 2, 3]

5.splice()

作用:万能方法,可删除、插入或替换元素。

语法splice(startIndex, deleteCount, item1, item2, ...)

示例

const arr = [1, 2, 3, 4];
// 删除并插入
arr.splice(1, 2, 'a', 'b'); 
// arr → [1, 'a', 'b', 4]

6.sort()

作用:排序数组(默认按 Unicode 码点)。

示例

const arr = [3, 1, 4, 2];
arr.sort((a, b) => a - b); // 升序 → [1, 2, 3, 4]

7.reverse()

作用:反转数组顺序。

示例

const arr = [1, 2, 3];
arr.reverse(); // arr → [3, 2, 1]

8.copyWithin()

作用:用于将数组的一部分浅拷贝到数组的同一位置的另一个位置上,并返回修改后的数组。它不会改变数组的长度。

语法:array.copyWithin(target, start[, end])

  • target:零基索引,复制序列的目标起始位置。
  • start:零基索引,开始复制的起始位置。
  • end(可选):零基索引,停止复制的结束位置(不包含)。默认为数组的长度。

示例

let arr = [1, 2, 3, 4, 5];
arr.copyWithin(0, 3, 5); // [4, 5, 3, 4, 5]
console.log(arr);

二、不修改原数组的方法

这些方法返回新数组或值,原始数组不变。

1.concat()

作用:合并多个数组或值。

示例

const arr1 = [1, 2];
const arr2 = arr1.concat(3, [4, 5]); 
// arr2 → [1, 2, 3, 4, 5]

2.slice()

作用:截取数组片段。

语法slice(startIndex, endIndex)endIndex 不包含)

示例

const arr = [1, 2, 3, 4];
const subArr = arr.slice(1, 3); // → [2, 3]

3.join()

作用:将数组元素拼接为字符串。

示例

const arr = ['a', 'b', 'c'];
console.log(arr.join('-')); // 输出: "a-b-c"

4.map()

作用创建一个新数组,这个新数组由原数组中的每个元素都调用一次提供的函数后的返回值组成。

示例

const arr = [1, 2, 3];
const doubled = arr.map(x => x * 2); // → [2, 4, 6]

5.filter()

作用:过滤满足条件的元素。

示例

const arr = [1, 2, 3, 4];
const even = arr.filter(x => x % 2 === 0); // → [2, 4]

6.reduce()

作用:累积计算(从左到右)。

示例(求和):

const arr = [1, 2, 3];
const sum = arr.reduce((acc, curr) => acc + curr, 0); // → 6

7.flat()

作用:flat()可以将一个多维数组的深度转成一维(扁平化或称作降维),它有一个选填的参数,代表要转换的深度数字,预设为1(只展开一层放到一维数组里,如果是2,只展开2层放到一位数组里),如果深度有很多层,可使用Infinity来全部展开成一维数组。

示例

const arr = [1, [2, [3]]];
console.log(arr.flat(2)); // → [1, 2, 3](深度为2)

8. flatMap() 

作用:对数组中的每个元素应用给定的回调函数,然后将结果展开一级,返回一个新数组

const arr1 = [1, 2, 1];const result = arr1.flatMap((num) => (num === 2 ? [2, 2] : 1));console.log(result); //  [1, 2, 2, 1]

三、搜索与检查方法

用于查找元素或验证条件。

1.indexOf()

作用:查找元素首次出现的索引(严格相等)。

示例

const arr = ['a', 'b', 'c'];
console.log(arr.indexOf('b')); // → 1

2.find()

作用:返回第一个满足条件的元素。

示例

const users = [{id:1}, {id:2}];
const user = users.find(u => u.id === 2); // → {id:2}

3.includes()

作用:检查数组是否包含某元素。

示例

const arr = [1, 2, 3];
console.log(arr.includes(2)); // → true

4.some()

作用:检查是否有至少一个元素满足条件。

示例

const arr = [1, 2, 3];
console.log(arr.some(x => x > 2)); // → true

5.every()

作用:检查是否所有元素都满足条件。

示例

const arr = [2, 4, 6];
console.log(arr.every(x => x % 2 === 0)); // → true

四、其他实用方法

1.fill()

作用:用一个固定值填充一个数组中从起始索引(默认为 0)到终止索引(默认为 array.length)内的全部元素。

语法:fill(value, start, end)

示例

const array1 = [1, 2, 3, 4];console.log(array1.fill(0, 2, 4));   //  → [1, 2, 0, 0]

2.Array.from()

作用:将类数组或可迭代对象转为数组。这个方法非常实用,所以这个方法我会给多个例子方便理解。

语法:Array.from(arrayLike, mapFn, thisArg)

  • arrayLike:想要转换成数组的类似数组或可迭代对象。
  • mapFn(可选):如果提供了该参数,则会调用此函数为数组中的每个元素执行一次,并将结果作为新的数组元素。
  • thisArg(可选):执行 mapFn 时使用的 this 值。

例1.转换字符串:

const str = 'hello';
const chars = Array.from(str); // → ['h', 'e', 'l', 'l', 'o']

 例2.将类数组对象转换为数组:

function sumArgs() {let arr = Array.from(arguments);return arr.reduce((acc, curr) => acc + curr, 0);
}
console.log(sumArgs(1, 2, 3)); // 6

 例3.使用 mapFn 参数:

let numbers = [1, 2, 3, 4];
let squares = Array.from(numbers, x => x * x);
console.log(squares); // [1, 4, 9, 16]

3.findIndex() / find() 

作用:返回第一个满足条件的元素的索引或元素的值。

示例

const arr = [5, 12, 8];
console.log(arr.findIndex(x => x > 10)); // → 1const array1 = [5, 12, 8, 130, 44];
const found = array1.find((element) => element > 10);
console.log(found); //  12

4.at()

作用:支持负数索引访问元素。

示例

const arr = [10, 20, 30];
console.log(arr.at(-1)); // → 30(等同于 arr[arr.length-1])

 5.forEach

作用:遍历数组(不触发更新)

示例:

let a = [1,2,3,4,5];let b = 0;a.forEach(item => { b = b + item;});console.log(b); // 15 ( 1+2+3+4+5 )

五、实战案例

场景1:数组去重

const arr = [1, 2, 2, 3];
const unique = [...new Set(arr)]; // → [1, 2, 3]

场景2:深拷贝数组

const original = [1, [2]];
const copy = JSON.parse(JSON.stringify(original));

场景3:合并与扁平化

const arr1 = [1, 2];
const arr2 = [3, [4]];
const merged = arr1.concat(arr2).flat(); // → [1, 2, 3, 4]

相关文章:

  • 并发设计模式实战系列(1):半同步/半异步模式
  • index: 自动化浏览器智能体
  • React 中如何获取 DOM:用 useRef 操作非受控组件
  • 基于n8n的AI应用工作流原理与技术解析
  • 【LLMs篇】09:白话PPO训练
  • Day53 二叉树的层序遍历
  • 【深度学习】【目标检测】【Ultralytics-YOLO系列】YOLOV3核心文件yolo.py解读
  • GN ninja 工程化构建例程
  • yarn的三大组件及各自的作用
  • 进阶篇|CAN FD 与性能优化
  • uboot下读取ubifs分区的方法
  • leetcode刷题日记——单词规律
  • webgl入门实例-11模型矩阵 (Model Matrix)基本概念
  • Unity粒子特效打包后不显示
  • FP16、FP32 及全系列浮点格式全解析:从半精度到四倍精度
  • IDEA 2025.1更新-AI助手试用和第三方模型集成方案
  • 2025年GitHub平台上的十大开源MCP服务器汇总分析
  • 【AI飞】AutoIT入门七(实战):python操控autoit解决csf视频批量转换(有点难,AI都不会)
  • 如何下载适用于Docker环境的Google Chrome浏览器【镜像使用方法】
  • RT-Thread RTThread studio 初使用
  • 长征十梦舟揽月稳步推进
  • 牛市早报|外汇局:4月以来外汇市场交易保持平稳,跨境资金延续净流入
  • 国际货币基金组织:将今年美国经济增长预期下调0.9个百分点至1.8%
  • 中国与柬埔寨签署多领域合作文件
  • 助力中国足球未来,香港赛马会鼎力支持U15国少选拔队赴英训练
  • 澳大利亚大选提前投票开始