快到校招了,要准备多复习js的基础内容,最近复习了各种数组的api,写一篇文章记录一下,我将按照方法是否改变数组自身来进行区分总结
改变数组自身的方法
- push: 用于在数组末尾位置添加元素
let arr = [1, 2, 3, 4]
arr.push(5) // [1,2,3,4,5]
- pop: 用于删除数组末尾位置元素并返回该元素
let arr = [1, 2, 3, 4]
arr.pop() // 4
- shift: 用于删除数组头部位置的一个元素
let arr = [1, 2, 3, 4]
arr.shift() // 1
- unshift: 用于在数组头部位置添加元素
let arr = [1, 2, 3, 4]
arr.unshift(5) // [5,1,2,3,4]
- splice: 用于删除指定位置,指定数量个元素,并且还可以添加第三个参数用于添加元素到该位置
let arr = [1, 2, 3, 4]
arr.splice(2, 2) // [1,2,5]
arr.splice(1, 0, 7, 8) // [1, 7, 8, 2, 5]
- reverse: 用于反转数组
let arr = [1, 2, 3, 4]
arr.reverse() // [5,4,3,2,1]
- sort: 对数组按照指定方法进行排序
let arr = [4, 2, 3, 5, 1]
arr.sort((a, b) => a - b) // [1,2,3,4,5]
- copyWithin: 复制指定位置的元素到指定位置
let arr = [4, 2, 3, 5, 1]
arr.copyWithin(1, 3) // [4,5,1,5,1]
- fill: 用指定的元素填充或替换指定位置元素
let arr = [4, 2, 3, 5, 1]
arr.fill(10, 1, 3) // [4, 10, 10, 10, 1]
不改变数组自身的方法
- concat: 用于连接两个数组
let arr = [1, 2, 3, 4]
let arr2 = [5, 6, 7]
arr.concat // [1,2,3,4,5,6,7]
- join: 返回指定字符将数组拼接后的字符串
let arr = [1, 2, 3, 4]
arr.join(' ') // '1 2 3 4'
- slice: 取出指定位置的元素,返回数组
let arr = [1, 2, 3, 4, 5, 6]
arr.slice(1, 4) // [2,3,4,5]
- toString: 返回用','拼接数组后的字符串
let arr = [1, 2, 3, 4]
arr.toString() // '1,2,3,4'
- toLocateString: 与toString类似
let arr= [{name:'zz'}, 123, "abc", new Date()]
array.toLocaleString() // [object Object],123,abc,2016/1/5 下午1:06:23
- indexOf: 返回第一次查找到的指定元素在数组中的下标
let arr = [1, 2, 3, 4]
arr.indexOf(2) // 1
- lastIndexOf: 返回最后一次出现的指定元素在数组中的下标
let arr = [1, 2, 3, 4, 3, 2]
arr.lastIndexOf(3) // 4
- includes: 判断数组中是否包含指定的元素
let arr = ['apple', 'banana', 'pineapple']
arr.includes('banana') // true
遍历方法
- foreach: 传入回调函数遍历数组(性能优于map,但比for循环差),可传入第二个参数,用于指定this指向
var array = [1, 3, 5];
var obj = {name:'cc'};
var sReturn = array.forEach(function(value, index, array){
array[index] = value;
console.log(this.name); // cc被打印了三次, this指向obj
},obj);
console.log(array); // [1, 3, 5]
- map: 传入回调函数遍历数组
var array = [18, 9, 10, 35, 80]
var newArr = array.map(item => item + 1)
console.log(newArr) // [19, 10, 11, 36, 81]
- every: 判断是否每一个数组元素都达到要求,所有都满足则返回true,第二个参数也可以指定this指向
var o = {0:10, 1:8, 2:25, length:3}
var bool = Array.prototype.every.call(o,function(value, index, obj){
return value >= 8
},o);
console.log(bool) // true
- some: 判断数组中是否有元素满足要求,满足返回true,没有则返回false
var array = [18, 9, 10, 35, 80]
var isExist = array.some(function(value, index, array){
return value > 20
});
console.log(isExist) // true
- filter: 用于过滤数组,遍历时,需要过滤出来当做新数组的元素的项在回调中返回true,不需要的,需要舍弃的返回false
var array = [18, 9, 10, 35, 80]
var array2 = array.filter(function(value, index, array){
return value > 20
});
console.log(array2) // [35, 80]
- reduce: 常用做累加器,参数有两个,一个是回调函数,另一个是初始值,其回调中接收4个参数:
1. previousValue(上一次调用回调函数时的返回值,或者初始值)
2. currentValue(当前正在处理的数组元素)
3. currentIndex(当前正在处理的数组元素下标)
4. array(调用 reduce() 方法的数组)
var array = [1, 2, 3, 4];
array.reduce((p, v) => p * v); // 24
- reduceRight: 与reduce类似,区别是redcueRight是从数组末尾开始
var array = [1, 2, 3, 4];
array.reduceRight((p, v) => p + v); // 10
find: 遍历数组查找满足条件的元素,并返回该元素
findIndex: 遍历数组查找满足条件的元素,返回其下标
entries: 返回数组的[key, value]迭代器,使用next访问下一个,使用value获取值
var array = ['a', 'b', 'c']
var iterator = array.entries()
console.log(iterator.next().value) // [0, 'a']
console.log(iterator.next().value) // [1, 'b']
console.log(iterator.next().value) // [2, 'c']
console.log(iterator.next().value) // undefined, 迭代器处于数组末尾时, 再迭代就会返回undefined
- keys: 返回数组键(key)组成的数组
[...Array(10).keys()] // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
- values: 返回数组值的迭代器
var array = ['abc', 'xyz']
var iterator = array.values()
console.log(iterator.next().value) //abc
console.log(iterator.next().value) //xyz