根据是否改变原数组,JavaScript 的 Array
API 可以分为两大类:变异方法(Mutating Methods) 和 非变异方法(Non-Mutating Methods)。
变异方法(Mutating Methods)
这些方法会直接修改原数组,并返回一个值(通常是修改后的数组长度或被移除的元素)。
-
push(element1, ..., elementN)
:- 作用:向数组的末尾添加一个或多个元素,并返回新的长度。
- 示例:
let arr = [1, 2, 3]; let newLength = arr.push(4, 5); console.log(arr); // [1, 2, 3, 4, 5] console.log(newLength); // 5
-
pop()
:- 作用:移除数组的最后一个元素,并返回该元素。
- 示例:
let arr = [1, 2, 3]; let lastElement = arr.pop(); console.log(arr); // [1, 2] console.log(lastElement); // 3
-
shift()
:- 作用:移除数组的第一个元素,并返回该元素。
- 示例:
let arr = [1, 2, 3]; let firstElement = arr.shift(); console.log(arr); // [2, 3] console.log(firstElement); // 1
-
unshift(element1, ..., elementN)
:- 作用:向数组的开头添加一个或多个元素,并返回新的长度。
- 示例:
let arr = [1, 2, 3]; let newLength = arr.unshift(0, -1); console.log(arr); // [-1, 0, 1, 2, 3] console.log(newLength); // 5
-
splice(start, deleteCount, item1, ..., itemN)
:- 作用:从数组中添加或删除元素。
- 示例:
let arr = [1, 2, 3, 4, 5]; let removedElements = arr.splice(2, 1, 'a', 'b'); console.log(arr); // [1, 2, 'a', 'b', 4, 5] console.log(removedElements); // [3]
-
sort([compareFunction])
:- 作用:对数组的元素进行排序,并返回排序后的数组。
- 示例:
let arr = [3, 1, 2]; arr.sort(); console.log(arr); // [1, 2, 3]
-
reverse()
:- 作用:颠倒数组中元素的顺序,并返回颠倒后的数组。
- 示例:
let arr = [1, 2, 3]; arr.reverse(); console.log(arr); // [3, 2, 1]
-
fill(value, start, end)
:- 作用:用一个固定值填充数组的一部分。
- 示例:
let arr = [1, 2, 3, 4, 5]; arr.fill(0, 1, 3); console.log(arr); // [1, 0, 0, 4, 5]
非变异方法(Non-Mutating Methods)
这些方法不会修改原数组,而是返回一个新的数组或值。
-
slice(start, end)
:- 作用:返回一个新的数组,包含从
start
到end
(不包括end
)的元素。 - 示例:
let arr = [1, 2, 3, 4, 5]; let newArr = arr.slice(1, 3); console.log(arr); // [1, 2, 3, 4, 5] (原数组不变) console.log(newArr); // [2, 3] (新数组)
- 作用:返回一个新的数组,包含从
-
concat(array1, ..., arrayN)
:- 作用:返回一个新的数组,包含原数组和传入的参数拼接而成的元素。
- 示例:
let arr1 = [1, 2, 3]; let arr2 = [4, 5]; let newArr = arr1.concat(arr2); console.log(arr1); // [1, 2, 3] (原数组不变) console.log(newArr); // [1, 2, 3, 4, 5] (新数组)
-
map(callback, thisArg)
:- 作用:返回一个新的数组,其结果是对原数组中的每个元素调用
callback
函数。 - 示例:
let arr = [1, 2, 3]; let newArr = arr.map(x => x * 2); console.log(arr); // [1, 2, 3] (原数组不变) console.log(newArr); // [2, 4, 6] (新数组)
- 作用:返回一个新的数组,其结果是对原数组中的每个元素调用
-
filter(callback, thisArg)
:- 作用:返回一个新的数组,包含通过
callback
函数测试的所有元素。 - 示例:
let arr = [1, 2, 3, 4, 5]; let newArr = arr.filter(x => x % 2 === 0); console.log(arr); // [1, 2, 3, 4, 5] (原数组不变) console.log(newArr); // [2, 4] (新数组)
- 作用:返回一个新的数组,包含通过
-
reduce(callback, initialValue)
:- 作用:对数组中的每个元素调用
callback
函数,返回一个累积结果。 - 示例:
let arr = [1, 2, 3, 4, 5]; let sum = arr.reduce((acc, curr) => acc + curr, 0); console.log(arr); // [1, 2, 3, 4, 5] (原数组不变) console.log(sum); // 15
- 作用:对数组中的每个元素调用
-
every(callback, thisArg)
:- 作用:测试数组中的所有元素是否都通过
callback
函数的测试。 - 示例:
let arr = [1, 2, 3, 4, 5]; let allPositive = arr.every(x => x > 0); console.log(arr); // [1, 2, 3, 4, 5] (原数组不变) console.log(allPositive); // true
- 作用:测试数组中的所有元素是否都通过
-
some(callback, thisArg)
:- 作用:测试数组中是否有至少一个元素通过
callback
函数的测试。 - 示例:
let arr = [1, 2, 3, 4, 5]; let hasEven = arr.some(x => x % 2 === 0); console.log(arr); // [1, 2, 3, 4, 5] (原数组不变) console.log(hasEven); // true
- 作用:测试数组中是否有至少一个元素通过
-
find(callback, thisArg)
:- 作用:返回数组中满足
callback
函数的第一个元素,否则返回undefined
。 - 示例:
let arr = [1, 2, 3, 4, 5]; let firstEven = arr.find(x => x % 2 === 0); console.log(arr); // [1, 2, 3, 4, 5] (原数组不变) console.log(firstEven); // 2
- 作用:返回数组中满足
-
findIndex(callback, thisArg)
:- 作用:返回数组中满足
callback
函数的第一个元素的索引,否则返回-1
。 - 示例:
let arr = [1, 2, 3, 4, 5]; let firstEvenIndex = arr.findIndex(x => x % 2 === 0); console.log(arr); // [1, 2, 3, 4, 5] (原数组不变) console.log(firstEvenIndex); // 1
- 作用:返回数组中满足
总结
- 变异方法:会直接修改原数组,并返回一个值(通常是修改后的数组长度或被移除的元素)。
- 非变异方法:不会修改原数组,而是返回一个新的数组或值。