JavaScript 提供了多种新增,移除,替换数组元素的方法,但是有些会影响原来的数组;有些则不会,它是新建了一个数组。
JavaScript数组方法对比
JavaScript 提供了多种新增,移除,替换数组元素的方法,但是有些会影响原来的数组;有些则不会,它是新建了一个数组。
新增:影响原数组
使用 array.push() 和 array.ushift() 新增元素会影响原来的数组。1
2
3
4
5let mutatingAdd = ['a', 'b', 'c', 'd', 'e'];
mutatingAdd.push('f'); // ['a', 'b', 'c', 'd', 'e', 'f']
mutatingAdd.unshift('z'); // ['z', 'a','b', 'c', 'd', 'e' 'f']
新增:不影响原数组
两种方式新增元素不会影响原数组,第一种是 array.concat() 。1
2
3
4
5const arr1 = ['a', 'b', 'c', 'd', 'e'];
const arr2 = arr1.concat('f'); // ['a', 'b', 'c', 'd', 'e', 'f']
console.log(arr1); // ['a', 'b', 'c', 'd', 'e']
第二种方法是使用 JavaScript 的展开(spread)操作符,展开操作符是三个点(…)1
2
3
4
5const arr1 = ['a', 'b', 'c', 'd', 'e'];
const arr2 = [...arr1, 'f']; // ['a', 'b', 'c', 'd', 'e', 'f']
const arr3 = ['z', ...arr1]; // ['z', 'a', 'b', 'c', 'd', 'e']
展开操作符会复制原来的数组,从原数组取出所有元素,然后存入新的环境。
移除:影响原数组
使用 array.pop() 和 array.shift() 移除数组元素时,会影响原来的数组。1
2
3
4
5let mutatingRemove = ['a', 'b', 'c', 'd', 'e'];
mutatingRemove.pop(); // ['a', 'b', 'c', 'd']
mutatingRemove.shift(); // ['b', 'c', 'd']
array.splice() 也可以删除数组的元素。1
2
3let mutatingRemove = ['a', 'b', 'c', 'd', 'e'];
mutatingRemove.splice(0, 2); // ['c', 'd', 'e']
splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。
arrayObject.splice(index,howmany,item1,.....,itemX)
参数| 描述
—|—
index |必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。
howmany| 必需。要删除的项目数量。如果设置为 0,则不会删除项目。
item1, …, itemX |可选。向数组添加的新项目。
移除:不影响原数组
JavaScript 的 array.filter() 方法基于原数组创建一个新数组,新数组仅包含匹配特定条件的元素。1
2
3
4
5
6
7
8
9
10const arr1 = ['a', 'b', 'c', 'd', 'e'];
const arr2 = arr1.filter(a => a !== 'e'); // ['a', 'b', 'c', 'd']
// 或者
const arr2 = arr1.filter(a => {
return a !== 'e';
}); // ['a', 'b', 'c', 'd']
以上代码的条件是“不等于 ‘e’ ”,因此新数组(arr2)里面没有包含 ‘e’。
另一种不影响原数组的方式是 array.slice()(不要与 array.splice() 混淆)。
1 | const arr1 = ['a', 'b', 'c', 'd', 'e']; |
slice() 方法可从已有的数组中返回选定的元素。
语法arrayObject.slice(start,end)
参数| 描述
—|—
start| 必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。
end| 可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。
如果 end 未被规定,那么 slice() 方法会选取从 start 到数组结尾的所有元素。
替换:影响原数组
可以使用 array.map() 创建一个新数组,并且可以检查每一个元素,根据特定的条件替换它们。
1 | const arr1 = ['a', 'b', 'c', 'd', 'e'] |
使用 array.map() 转换数据
array.map() 是个强力方法,可以用于转换数据,而不污染原先的数据源。1
2
3
4
5const origArr = ['a', 'b', 'c', 'd', 'e'];
const transformedArr = origArr.map(n => n + 'Hi!'); // ['aHi!', 'bHi!', 'cHi!', 'dHi!', 'eHi!']
console.log(origArr); // ['a', 'b', 'c', 'd', 'e']; // 原数组毫发无损
本作品采用 知识共享署名 2.5 中国大陆许可协议 进行许可,欢迎转载,但转载请注明来自JayMo,并保持转载后文章内容的完整。本人保留所有版权相关权利。
本文永久链接:http://jaymo666.github.io/2018/04/23/JavaScript数组方法对比/