【JavaScript】数组常用方法整理

数组是 JavaScript 中最常用的数据结构,ES6 之后数组方法越来越丰富。按「是否改变原数组」分类整理,方便查阅和选择。

1. 不改变原数组:map、filter、find 等

const nums = [1, 2, 3, 4, 5];

// map:每项加工后返回新数组
const doubled = nums.map(n => n * 2);        // [2, 4, 6, 8, 10]

// filter:筛出满足条件的项
const evens = nums.filter(n => n % 2 === 0); // [2, 4]

// find / findIndex:找第一个满足条件的项
const found = nums.find(n => n > 3);         // 4

// some / every:是否存在 / 是否全部满足
nums.some(n => n > 4);   // true
nums.every(n => n > 0);  // true

// reduce:聚合为一个值
const total = nums.reduce((sum, n) => sum + n, 0); // 15

// slice:截取片段(不修改原数组)
nums.slice(1, 3); // [2, 3]

2. 改变原数组:push、splice、sort 等

const arr = [3, 1, 4, 1, 5];

// 尾部增删
arr.push(9);   // 返回新长度,数组变为 [3,1,4,1,5,9]
arr.pop();     // 弹出 9

// 头部增删
arr.unshift(0); // 头部插入
arr.shift();    // 弹出头元素

// splice:任意位置的增删改(返回被删除元素)
arr.splice(1, 2, 7, 8); // 从下标1删2个,再插入 7,8

// sort 就地排序,默认按字符串比较!
[10, 2, 33].sort();               // [10, 2, 33],错误排序
[10, 2, 33].sort((a, b) => a - b); // [2, 10, 33],正确
arr.sort((a, b) => b - a);        // 降序

sort 和 splice 都会修改原数组,处理需要保留原始数据的场景时,先 slice 或用 toSorted、toSpliced(ES2023 新方法)。

3. 遍历方式对比

const list = ["a", "b", "c"];

// for...of:遍历值(推荐用于可迭代对象)
for (const item of list) console.log(item);

// forEach:简洁,但不能 break/continue
list.forEach((item, index) => console.log(index, item));

// for...in:遍历下标(键),数组不建议使用
for (const key in list) console.log(key); // "0" "1" "2"

4. 扁平化与查找

// flat:拍平嵌套数组
[1, [2, [3, [4]]]].flat(2);    // [1, 2, 3, [4]]
[1, [2, [3, [4]]]].flat(Infinity); // [1, 2, 3, 4]

// includes:判断是否包含
[1, 2, 3].includes(2); // true

// indexOf:查找下标,不存在返回 -1
["a", "b"].indexOf("b"); // 1

// join / split:数组与字符串互转
"a,b,c".split(",");      // ["a", "b", "c"]
["a", "b"].join("-");    // "a-b"

5. 常见陷阱

最常踩的三个坑:一是 sort 默认按字符串排序,数字必须传比较函数;二是 forEach 无法用 break 中断,需要中断就改用 for…of 或 some/every 配合 return true;三是 NaN 的判断,indexOf 找不到 NaN,includes 可以。

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容