JavaScript 数组是高度灵活的集合,提供了许多用于操作和查询数组的方法。以下是一些常用的数组方法:
-
push()
- 添加一个或多个元素到数组末尾。
let numbers = [1, 2, 3]; numbers.push(4); // [1, 2, 3, 4]
-
pop()
- 移除数组最后一个元素并返回它。
let numbers = [1, 2, 3]; let last = numbers.pop(); // last = 3, numbers = [1, 2]
-
shift()
- 移除数组第一个元素并返回它。
let numbers = [1, 2, 3]; let first = numbers.shift(); // first = 1, numbers = [2, 3]
-
unshift()
- 在数组开头添加一个或多个元素。
let numbers = [1, 2, 3]; numbers.unshift(0); // [0, 1, 2, 3]
-
splice()
- 向/从数组中添加/删除元素。
let numbers = [1, 2, 3, 4]; numbers.splice(1, 2, 'a', 'b'); // [1, 'a', 'b', 4]
-
slice()
- 返回数组的一部分。
let numbers = [1, 2, 3, 4, 5]; let part = numbers.slice(1, 4); // [2, 3, 4]
-
concat()
- 合并两个或多个数组。
let numbers1 = [1, 2]; let numbers2 = [3, 4]; let combined = numbers1.concat(numbers2); // [1, 2, 3, 4]
-
join()
- 将数组元素连接成一个字符串。
let words = ['Hello', 'world']; let sentence = words.join(' '); // 'Hello world'
-
indexOf()
- 返回某个元素在数组中首次出现的索引。
let numbers = [1, 2, 3, 4]; let index = numbers.indexOf(3); // 2
-
lastIndexOf()
- 返回某个元素在数组中最后一次出现的索引。
let numbers = [1, 2, 3, 2, 4]; let lastIndex = numbers.lastIndexOf(2); // 3
-
find()
- 返回数组中满足测试函数的第一个元素的值。
let users = [{ name: 'Alice' }, { name: 'Bob' }]; let user = users.find(user => user.name === 'Bob'); // { name: 'Bob' }
-
findIndex()
- 返回数组中满足测试函数的第一个元素的索引。
let users = [{ name: 'Alice' }, { name: 'Bob' }]; let index = users.findIndex(user => user.name === 'Bob'); // 1
-
filter()
- 创建一个新数组,包含通过测试的所有元素。
let numbers = [1, 2, 3, 4, 5]; let evens = numbers.filter(number => number % 2 === 0); // [2, 4]
-
map()
- 创建一个新数组,其结果是调用函数后的返回值。
let numbers = [1, 2, 3, 4]; let squares = numbers.map(number => number * number); // [1, 4, 9, 16]
-
reduce()
- 将数组中的所有元素累加为一个单一的值。
let numbers = [1, 2, 3, 4]; let sum = numbers.reduce((total, num) => total + num, 0); // 10
-
reduceRight()
- 从右到左将数组中的所有元素累加为一个单一的值。
let numbers = [1, 2, 3, 4]; let sum = numbers.reduceRight((total, num) => total + num, 0); // 10
-
some()
- 如果数组中至少有一个元素满足测试,则返回true。
let numbers = [1, 2, 3]; let hasPositive = numbers.some(number => number > 0); // true
-
every()
- 如果数组中的所有元素都满足测试,则返回true。
let numbers = [1, 2, 3]; let allPositive = numbers.every(number => number > 0); // true
-
sort()
- 对数组元素进行排序。
let numbers = [4, 2, 5, 1, 3]; numbers.sort((a, b) => a - b); // [1, 2, 3, 4, 5]
-
reverse()
- 颠倒数组中元素的顺序。
let numbers = [1, 2, 3, 4]; numbers.reverse(); // [4, 3, 2, 1]
ECMAScript 6(也称为ES2015)引入了许多新的数组方法,极大地增强了数组的操作能力。以下是一些ES6中新增的数组方法及其示例:
-
Array.of()
- 创建一个具有可变数量参数的新数组实例,而不考虑参数的数量或类型。
let arr = Array.of(1, '2', true); // [1, '2', true]
-
Array.from()
- 从类数组对象或可迭代对象创建一个新的、浅拷贝的数组实例。
let str = 'hello'; let chars = Array.from(str); // ['h', 'e', 'l', 'l', 'o']
-
find()
- 返回数组中满足提供的测试函数的第一个元素的值。如果没有找到符合条件的元素,则返回
undefined
。
let users = [{ name: 'Alice' }, { name: 'Bob' }]; let user = users.find(user => user.name === 'Bob'); // { name: 'Bob' }
- 返回数组中满足提供的测试函数的第一个元素的值。如果没有找到符合条件的元素,则返回
-
findIndex()
- 返回数组中满足提供的测试函数的第一个元素的索引。如果没有找到符合条件的元素,则返回
-1
。
let users = [{ name: 'Alice' }, { name: 'Bob' }]; let index = users.findIndex(user => user.name === 'Bob'); // 1
- 返回数组中满足提供的测试函数的第一个元素的索引。如果没有找到符合条件的元素,则返回
-
fill()
- 用一个固定值填充一个数组从开始到结束(不包括结束)的元素。
let numbers = [1, 2, 3, 4]; numbers.fill(0); // [0, 0, 0, 0]
-
copyWithin()
- 将数组的一部分复制到数组的另一个位置。
let numbers = [1, 2, 3, 4, 5]; numbers.copyWithin(0, 3); // [4, 5, 3, 4, 5]
-
entries(), keys(), values()
- 返回一个迭代器,允许遍历数组的元素。
entries()
返回键值对的迭代器。keys()
返回键的迭代器。values()
返回值的迭代器。
let arr = ['a', 'b', 'c']; for (let [index, value] of arr.entries()) { console.log(index, value); } // 0 'a', 1 'b', 2 'c'
-
includes()
- 判断一个数组是否包含一个指定的值,根据情况返回
true
或false
。
let numbers = [1, 2, 3]; let hasThree = numbers.includes(3); // true
- 判断一个数组是否包含一个指定的值,根据情况返回
-
flat(), flatMap()
flat()
将数组元素扁平化到一个新数组中,深度默认为1。flatMap()
首先使用映射函数映射每个元素,然后将结果扁平化到一个新数组中。
let arr = [1, [2, [3, [4]]]]; let flatArr = arr.flat(2); // [1, 2, 3, [4]] let flatMappedArr = arr.flatMap(x => x); // [1, 2, 3, 4]
这些方法使得数组操作更加灵活和强大,提高了开发效率,展示了如何使用数组方法来执行常见的操作,如添加或删除元素、搜索、排序和转换数组。