JavaScript 数组方法大盘点:从新手到大佬,快速掌握所有必备技能!🎉

250 阅读6分钟

前言

大家好!今天我们将继续深入探索 JavaScript 数组的奥秘!你可能以为 pushpop 就是数组操作的全部,但其实数组的世界远不止如此。除了这些基础方法,还有许多其他方法能够让你的数组操作如鱼得水,大幅提高开发效率。今天的目标是帮助你从新手晋升为 JavaScript 数组高手,不仅掌握常用方法,还会揭秘一些鲜为人知的“宝藏”方法。让我们继续这段魔法般的数组之旅吧!🚀


相关方法

1. push()pop()

  • push():将一个或多个元素添加到数组末尾,并返回数组的新长度。
  • pop():从数组末尾删除一个元素,返回被删除的元素。
const fruits = ['apple', 'banana'];
fruits.push('orange'); // 添加橙子
console.log(fruits); // ['apple', 'banana', 'orange']

const lastFruit = fruits.pop(); // 删除最后一个元素
console.log(lastFruit); // 'orange'
console.log(fruits); // ['apple', 'banana']

2. shift()unshift()

  • shift():删除数组中的第一个元素,返回被删除的元素。
  • unshift():将一个或多个元素添加到数组的开头,返回数组的新长度。
const numbers = [1, 2, 3, 4];
numbers.unshift(0); // 在数组开头添加 0
console.log(numbers); // [0, 1, 2, 3, 4]

const firstNumber = numbers.shift(); // 删除第一个元素
console.log(firstNumber); // 0
console.log(numbers); // [1, 2, 3, 4]

3. map()

  • map():创建一个新数组,数组中的每个元素是原数组元素调用指定函数处理后的结果。
let numbers = [1, 2, 3, 4];
let squared = numbers.map((num) => num ** 2); // 数组中每个数字平方
console.log(squared); // [1, 4, 9, 16]

4. filter()

  • filter():创建一个新数组,包含所有通过指定条件函数筛选出的元素,原数组不受影响。
let ages = [12, 18, 25, 30, 15];
let adults = ages.filter((age) => age >= 18); // 筛选出年龄大于等于 18 的人
console.log(adults); // [18, 25, 30]

5. reduce()

  • reduce():对数组中的每个元素执行指定的累加操作,最终返回单一结果(如求和、拼接等)。
let numbers = [1, 2, 3, 4];
let sum = numbers.reduce((acc, num) => acc + num, 0); // 数组求和
console.log(sum); // 10

6. forEach()

  • forEach():对数组的每个元素执行指定的回调函数,不返回结果,常用于遍历。
let colors = ['red', 'green', 'blue'];
colors.forEach(color => console.log(color));  // 打印每个颜色
// 输出:
// red
// green
// blue

7. find()findIndex()

  • find():返回第一个满足条件的元素,如果没有找到,则返回 undefined
  • findIndex():返回第一个满足条件的元素的索引,如果没有找到,则返回 -1。
let users = [{ name: 'Tom', age: 20 }, { name: 'Jerry', age: 25 }];
let user = users.find(user => user.name === 'Tom');  // 查找 Tom
console.log(user);  // { name: 'Tom', age: 20 }

let index = users.findIndex(user => user.name === 'Jerry');  // 查找 Jerry 的索引
console.log(index);  // 1

8. sort()

  • sort():对数组元素进行排序,默认按字符串字典序排列。如果要按数字大小排序,需要提供比较函数。
let nums = [4, 2, 8, 5];
nums.sort((a, b) => a - b);  // 数字升序排序
console.log(nums);  // [2, 4, 5, 8]

9. slice()splice()

  • slice():返回数组的一个新数组,包含指定起始和结束位置之间的元素,不会改变原数组。
  • splice():可以删除或插入数组中的元素,直接改变原数组。
let animals = ['dog', 'cat', 'rabbit', 'bird'];
let selectedAnimals = animals.slice(1, 3);  // 获取从索引 1 到 3 的元素
console.log(selectedAnimals);  // ['cat', 'rabbit']
console.log(animals);  // ['dog', 'cat', 'rabbit', 'bird']

animals.splice(2, 1, 'fish');  // 删除第 2 个元素,插入 'fish'
console.log(animals);  // ['dog', 'cat', 'fish', 'bird']

10. concat()

  • concat():合并两个或多个数组,返回一个新数组。
let array1 = [1, 2];
let array2 = [3, 4];
let combined = array1.concat(array2);  // 合并数组
console.log(combined);  // [1, 2, 3, 4]

11. join()

  • join():将数组中的所有元素连接成一个字符串,元素间可以指定分隔符。
let fruits = ['apple', 'banana', 'cherry'];
let fruitString = fruits.join(' & ');  // 用 '&' 连接数组元素
console.log(fruitString);  // 'apple & banana & cherry'

12. some()every()

  • some():只要有至少一个元素符合条件,返回 true,否则返回 false
  • every():只有所有元素都符合条件,返回 true,否则返回 false
let numbers = [10, 20, 30, 40];
let hasLargeNumber = numbers.some(num => num > 25);  // 判断是否有大于 25 的元素
console.log(hasLargeNumber);  // true

let allLargeNumbers = numbers.every(num => num > 5);  // 判断所有数字是否都大于 5
console.log(allLargeNumbers);  // true

13. from()

  • from():将类数组对象或可迭代对象转换为数组。
let str = 'hello';
let arr = Array.from(str);  // 将字符串转换为数组
console.log(arr);  // ['h', 'e', 'l', 'l', 'o']

14. fill()

  • fill():用指定的值填充数组的指定位置,填充的元素会改变原数组。
let numbers = [1, 2, 3, 4];
numbers.fill(0, 2, 4);  // 从索引 2 到 4 填充为 0
console.log(numbers);  // [1, 2, 0, 0]

15. includes()

  • includes():判断数组中是否包含某个特定的元素,返回布尔值。
let fruits = ['apple', 'banana', 'cherry'];
console.log(fruits.includes('banana'));  // true
console.log(fruits.includes('orange'));  // false

16. reverse()

  • reverse():将数组的元素反转,直接修改原数组。
let numbers = [1, 2, 3, 4];
numbers.reverse();  // 反转数组
console.log(numbers);  // [4, 3, 2, 1]

17. indexOf()lastIndexOf()

  • indexOf() :返回数组中首次出现指定元素的索引,若没有找到,返回 -1
  • lastIndexOf() :返回数组中最后一次出现指定元素的索引,若没有找到,返回 -1
let fruits = ['apple', 'banana', 'cherry', 'banana'];
console.log(fruits.indexOf('banana'));  // 1(返回第一个 banana 的索引)
console.log(fruits.lastIndexOf('banana'));  // 3(返回最后一个 banana 的索引)
console.log(fruits.indexOf('grape'));  // -1(未找到 grape)

18. Array.isArray()

  • Array.isArray():判断传入的值是否是一个数组,返回 truefalse
console.log(Array.isArray([1, 2, 3]));  // true
console.log(Array.isArray('hello'));  // false
console.log(Array.isArray({ name: 'Tom' }));  // false

19. at()

  • at() :该方法允许你访问数组中指定位置的元素,支持负数索引,从数组末尾向前计算索引。负数索引使得访问末尾元素变得更加简便
const arr = [10, 20, 30, 40, 50];
console.log(arr.at(2));  // 30
console.log(arr.at(-1));  // 50(倒数第一个元素)
console.log(arr.at(-2));  // 40(倒数第二个元素)

20. toSorted()

  • 此方法创建并返回一个新数组,其中的元素已经按照指定的排序规则进行排序。原数组不会被修改
const arr = [5, 3, 8, 1];
const sortedArr = arr.toSorted();
console.log(sortedArr);  // [1, 3, 5, 8]
console.log(arr);  // [5, 3, 8, 1](原数组不变)

21. toReversed()

  • 此方法返回一个新数组,其中的元素顺序已被反转。原数组不变
const arr = [1, 2, 3, 4];
const reversedArr = arr.toReversed();
console.log(reversedArr);  // [4, 3, 2, 1]
console.log(arr);  // [1, 2, 3, 4](原数组不变)

22. toSpliced()

  • 此方法返回一个新数组,包含原数组的一个子集,且可以根据需要进行插入或删除操作。原数组不受影响
const arr = [10, 20, 30, 40];
const splicedArr = arr.toSpliced(1, 2, 25, 35);
console.log(splicedArr);  // [10, 25, 35, 40]
console.log(arr);  // [10, 20, 30, 40](原数组不变)

23. findLast()

  • 此方法返回数组中最后一个满足指定条件的元素。如果没有找到匹配的元素,返回 undefined
const arr = [10, 20, 30, 40];
const found = arr.findLast(num => num < 35);
console.log(found);  // 30(从后往前查找,第一个符合条件的元素)

24、findLastIndex()

  • 此方法返回数组中最后一个满足指定条件的元素的索引。如果没有找到匹配的元素,返回 -1
const arr = [10, 20, 30, 40];
const index = arr.findLastIndex(num => num < 35);
console.log(index);  // 2(从后往前查找,第一个符合条件的元素的索引)

总结

这些 JavaScript 数组方法就像是数组的超级英雄,掌握它们,你就能让数组操作事半功倍!从基础的增删查改到高级的 mapreduce,以及一些不常用但极具威力的方法如 fromfillincludes,都能帮助你在开发中大显身手。希望今天的分享能够让你在

数组的世界里游刃有余!如果你有其他的数组操作技巧,欢迎留言讨论!🔧