JS 中数组的常用方法
常规方法
一、push()
push()
方法可向数组的末尾添加一个或多个元素,并返回新的数组长度。会改变原数组。
1 2 3 4 5
| let a = ['a', 'b', 'c'] let b = a.push('d') console.log(a) console.log(b) push方法可以一次添加多个元素
|
二、pop()
pop()
方法用于删除并返回数组的最后一个元素。会改变原数组。
1 2 3 4
| let a = ['a', 'b', 'c'] let b = a.pop() console.log(a) console.log(b)
|
三、unshift()
unshift()
方法可向数组的开头添加一个或更多元素,并返回新的数组长度。改变原数组。
1 2 3
| var arr = [2, 3, 4, 5] console.log(arr.unshift(3, 1)) console.log(arr)
|
四、shift()
shift()
方法用于删除并返回数组的第一个元素。会改变原数组。
1 2 3
| var arr = [2, 3, 4] console.log(arr.shift()) console.log(arr)
|
五、concat()
concat()
方法用于连接两个或多个数组。该方法不会改变现有的数组,仅会返回一个连接在一起的数组。
1 2 3 4 5
| var arr1 = [1, 2, 3] var arr2 = [4, 5] var arr3 = arr1.concat(arr2) console.log(arr1) console.log(arr3)
|
ES6 中也可以这么写
1 2 3 4 5
| let arr1 = [1, 2, 3] let arr2 = [4, 5] let arr3 = [...arr1, ...arr2] console.log(arr1) console.log(arr3)
|
六、join()
join()
方法用于把数组中的所有元素放入一个字符串。元素通过指定的分隔符进行分隔,默认使用”,”号分割,不改变原数组。
数组转字符串
1 2 3 4
| var arr = [2, 3, 4] console.log(arr.join()) console.log(arr.join('-')) console.log(arr)
|
七、slice()
截取从start
到 end
下标区间中数组的元素。返回一个新的数组,该方法不会修改原数组。
1 2 3
| var arr = [2, 3, 4, 5] console.log(arr.slice(1, 3)) console.log(arr)
|
八、splice()
splice()
方法可删除从 index
(数组下标) 处开始的零个或多个元素,并且用参数列表中声明的一个或多个值来替换那些被删除的元素。如果从数组中删除了元素,则返回的是含有被删除的元素的数组。此方法会直接对数组进行修改。
删除数组
1 2 3 4 5 6
| var a = [5, 6, 7, 8] console.log(a.splice(1, 0, 9)) console.log(a) var b = [5, 6, 7, 8] console.log(b.splice(1, 2, 3)) console.log(b)
|
九、sort 排序
按照 Unicode code
位置排序,默认升序
1 2 3 4 5
| var fruit = ['cherries', 'apples', 'bananas'] fruit.sort()
var scores = [1, 10, 21, 2] scores.sort()
|
当不带参数调用 sort()
时,数组元素是以ACSII
码顺序进行排序(如有必要将临时转化为字符串进行比较)。
可以传入一个 function
,用来自定义排序方式
1 2 3 4 5
| var nums = [12, 645, 6, 85, 81, 0, 9, 365, 4, 752] var arr = nums.sort(function (a, b) { return a - b }) console.log(arr)
|
十、reverse()
reverse
() 方法用于颠倒数组中元素的顺序。返回的是颠倒后的数组,会改变原数组。
1 2 3
| var arr = [2, 3, 4] console.log(arr.reverse()) console.log(arr)
|
十一、indexOf() 和 lastIndexOf()
都接受两个参数:查找的值 、查找起始位置 。 不存在,返回 -1
;存在,返回当前数组下标。indexOf
是从前往后查找, lastIndexOf
是从后往前查找。
indexOf()
1 2 3 4 5 6 7
| var a = [2, 9, 9] a.indexOf(2) a.indexOf(7)
if (a.indexOf(7) === -1) { console.log(a) }
|
lastIndexOf()
1 2 3 4 5 6 7
| var numbers = [2, 5, 9, 2] numbers.lastIndexOf(2) numbers.lastIndexOf(7) numbers.lastIndexOf(2, 3) numbers.lastIndexOf(2, 2) numbers.lastIndexOf(2, -2) numbers.lastIndexOf(2, -1)
|
十二、every()
对数组的每一项都运行指定的函数,如果每一项都返回 ture
,则返回 true
。
1 2 3 4
| function isAdult(element, index, array) { return element > 18 } ;[22, 25, 28, 34, 46].every(isAdult)
|
十三、some()
对数组的每一项都运行指定的函数,如果任意一项都返回 ture
,则返回 true
。
1 2 3 4 5
| function compare(element, index, array) { return element > 10 } ;[2, 5, 8, 1, 4].some(compare) ;[12, 5, 8, 1, 4].some(compare)
|
十四、filter()
对数组的每一项都运行给定的函数,返回结果为 ture
的项组成的数组。
1 2 3 4 5
| let ages = [15, 25, 34, 56, 77, 8, 17]
let adultAge = ages.filter(age => age > 18)
|
十五、map()
对数组的每一项都运行指定的函数,返回每次函数调用的结果组成一个新数组。
1 2 3 4 5 6 7 8 9
| let numbers = [1, 5, 10, 15];
let doubles = numbers.map(x => x * 2) })
|
十六、forEach()
1 2 3 4 5 6
| const items = ['item1', 'item2', 'item3'] const copy = [] items.forEach((item, index) => { copy.push(item) }) console.log(copy)
|
ES6 新增方法
一、find()
传入一个回调函数,找到数组中符合当前搜索规则的第一个元素,返回它,并且终止搜索。
1 2 3
| const arr = [1, '2', 3, 3, '2']
console.log(arr.find(n => typeof n === 'number'))
|
二、findIndex()
传入一个回调函数,找到数组中符合当前搜索规则的第一个元素,返回它的下标,并终止搜索。
1 2 3
| const arr = [1, '2', 3, 3, '2']
console.log(arr.findIndex(n => typeof n === 'number'))
|
三、fill()
用新元素替换掉数组内的元素,可以指定替换下标范围。fill(value, start, end)
1 2 3
| var arr = [1, 2, 3, 4, 5]
arr.fill(6, 1, 3)
|
四、copyWithin()
选择数组的某个下标,从该位置开始复制数组元素,默认从0
开始复制。也可以指定要复制的元素范围。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| arr.copyWithin(target, start, end)
var arr = [1, 2, 3, 4, 5]
console.log(arr.copyWithin(3))
var arr1 = [1, 2, 3, 4, 5]
console.log(arr1.copyWithin(3, 1))
var arr2 = [1, 2, 3, 4, 5]
console.log(arr2.copyWithin(3, 1, 2))
|
五、from()
将类似数组的对象(array-like object)
和可遍历(iterable
)的对象转为真正的数组
1 2 3 4 5
| const bar = ['a', 'b', 'c']
Array.from(bar)
Array.from('foo')
|
六、of()
用于将一组值,转换为数组。这个方法的主要目的,是弥补数组构造函数 Array()
的不足。因为参数个数的不同,会导致 Array()
的行为有差异。
1 2 3 4 5 6 7 8
| Array() Array(3) Array(3, 11, 8) Array.of(7) Array.of(1, 2, 3)
Array(7) Array(1, 2, 3)
|
七、entries()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| var arr = ['a', 'b', 'c'] for (let v of arr.entries()) { console.log(v) }
var arr = new Set(['a', 'b', 'c']) for (let v of arr.entries()) { console.log(v) }
var arr = new Map() arr.set('a', 'a') arr.set('b', 'b') for (let v of arr.entries()) { console.log(v) }
|
八、values()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| var arr = ['a', 'b', 'c'] for (let v of arr.values()) { console.log(v) }
var arr = new Set(['a', 'b', 'c']) for (let v of arr.values()) { console.log(v) }
var arr = new Map() arr.set('a', 'a') arr.set('b', 'b') for (let v of arr.values()) { console.log(v) }
|
九、keys()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| const arr = ['a', 'b', 'c'] for (let v of arr.keys()) { console.log(v) }
const arr = new Set(['a', 'b', 'c']) for (let v of arr.keys()) { console.log(v) }
const arr = new Map() arr.set('a', 'a') arr.set('b', 'b') for (let v of arr.keys()) { console.log(v) }
|
十、includes()
判断数组中是否存在该元素,参数:查找的值、起始位置,可以替换 ES5
时代的 indexOf
判断方式。indexOf
判断元素是否为 NaN
,会判断错误。
1 2 3 4
| var a = [1, 2, 3, NaN] a.includes(2) a.includes(4) a.includes(NaN)
|