本篇博客仅用于给自己当作一个API文档,已被随时查询
之前的版本整体思路比较乱,因为学习reactJS
的原因所以重新整理了一下【因为reactJS
强调尽可能不更改原始数据】。
话不多说我们开始吧。
上面我们提到reactJS
需要保留原始数据,以保留原始记录为后续的操作提供根源。所以我们为此将数组中的方法分为两大类:改变自身的方法 & 不改变自身的方法
按操作前后是否改变区分
改变自身的方法
array.copyWithin(target, start [, end = this.length])
【有兼容性问题】
用于在数组内的替换操作,即替换元素和被替换元素都是数组内的元素
参数皆为整数,允许start,end为负数(倒数第n个)array.fill(value [,statrt = 0[, end = this.length]])
将数组中指定区间的所有元素的值,都替换成value
start,end允许为负值,同上array.pop()
删除一个数组中的最后一个元素,并且返回这个元素array.push(element1, ...elementN)
添加一个或多个元素到数组的末尾,并返回数组新的长度array.reverse()
前后颠倒数组中元素的位置,第一个元素会成为最后一个array.shift()
删除数组的第一个元素,并返回这个元素array.unshift(element1, ...elementN)
在数组的开头插入一个或多个元素,并返回数组的新长度array.sort([function(a, b)])
对数组的元素做原地的排序,并返回这个数组。sort可能不稳定,默认按照字符串的unicode
码位点排序记a和b是两个将要被比较的元素:
- 如果函数
function(a, b)
返回值小于0, 则a会排在b之前 - 如何函数返回值等于0, 则a和b的相对位置不变(并不被保证)
- 如果函数返回值大于0,则a会排在b之后
- 比较函数输出结果必须稳定,否则排序的结果将是不确定的
- 如果函数
array.splice(start, deleteCount[, item1[, item2...])
在任意的位置给数组添加或删除任意个元素(拼接),返回被删除的元素组成的数组,没有则返回空数组start
:开始操作的索引deleteCount
:要移除的数组元素的个数itemN
:要添加进数组的元素,如果不指定,则splice
只删除数组元素
不改变自身的方法
array.concat(value1, value2.....)
将传入的数组或非数组值与原数组合并,组成一个新的数组并返回array.includes(searchElement, [, fromIndex])
[实验性质,es7,可能会改变或删除]
用来判断当前数组是否包含某指定的值,如果是,则返回true
,否则false
array.join([separator = ','])
将数组中的所有元素连接成一个字符串(默认用逗号作为分隔符,如果separator是一个空字符串,那么数组中的所有元素将被直接连接)
如果元素是undefined或者null,则会转化成空字符串array.slice([begin = 0 [, end = this.length - 1]])
把数组中一部分的浅复制(shallow copy
)存入一个新的数组对象中,并返回这个新的数组array.toLocaleString()
返回一个字符串表示数组中的元素。数组中的元素将使用各自的toLocaleString
方法转化成字符串,这些字符串将使用一个特定语言环境的字符串(例如逗号)隔开array.indexOf(searchElement[, fromIndex = 0])
返回指定元素能在数组中找到的第一个索引值,否则返回-1fromIndex
可以为负,表示从倒数第n个开始(此时仍然从前向后查询数组)
使用“严格相等”(===)进行匹配array.lastIndexOf(searchElement[, fromIndex = arr.length - 1])
返回指定元素在数组中的最后一个的索引,如果不存在则返回-1, 从数组的后面向前查找
遍历方法
array.forEach((val, index, arr) => {})
让数组的每一项都执行一次给定的函数
v表示当前项的值,i表示当前索引,a表示数组本身forEach
遍历的范围在第一次调用 callback前就会确定。调用forEach
后添加到数组中的项不会被callback
访问到。如果已经存在的值被改变,则传递给callback
的值是forEach
遍历到他们那一刻的值。已删除的项不会被遍历到。array.entries()
返回一个Array Iterator对象,该对象包含数组中每一个索引的键值对array.every(callback(val, index, arr){})
callback
只会为那些已经被赋值的索引调用,不会为那些被删除或从来没有被赋值的索引调用(返回的是一个bollean
值)array.some()
:对每个元素的callback函数结果作逻辑“||”操作array.filter((val, index, arr) => {})
使用指定的函数测试所有元素,并创建一个包含所有测试通过的元素的新数组
callback函数返回一个布尔值,true即通过测试
callback只会在已经赋值的索引上被调用,对于那些已经被删除或者从未被赋值的索引不会被调用
不会改变原数组array.find((val, index, arr) =>{})
【有兼容性问题目前】
返回数组中满足测试条件的第一个元素,如果没有满足条件的元素,则返回undefinedarray.keys()
返回一个数组索引的迭代器(类似于array.entries()
方法)array.map((val, index, arr) => {})
返回一个由原数组中的每个元素调用一个指定方法后的返回值组成的新数组
map 不修改调用它的原数组本身(当然可以在 callback 执行时改变原数组)array.reduce(callback[, initialValue])
该方法接收一个函数作为累加器(accumulator
),数组中的每个值(从左到右)开始合并,最终为一个值previousValue
:上一次调用回调返回的值,或者是提供的初始值(initialValue
)currentValue
: 数组中当前被处理的元素index
: indexarray
: 调用的数组
按功能区分
检测数组
Array.isArray(obj)
:确定obj
是否为数组Object.prototype.toString.call(obj)
转换方法
toString()
:返回由数组中每个值的字符串形式拼接而成的,以逗号分隔的字符串valueOf()
:返回 Array 对象的原始值(返回最适合该对象类型的原始值)
栈 & 队列
push
:入尾(任意个参数)pop
:出尾(1个参数)shift
:出头(1个参数)unshift
:入头(任意个参数)
重排序方法
reverse()
:反转数组1
2
3
4
5
6var arr = [0, 1, 10, 15, 5]
function compare(val1, val2){
return (val2 - val1)
}
arr.sort(compare)
// [0, 1, 5, 10, 15]
操作方法
concat( arr | val )
:连接。参数可为值或数组,直接更新操作对象splice()
:原数组改变删除:
arr.splice(startIndex, delNum)
插入:
arr.splice(startIndex, 0, insertItem)
替换:
arr.splice(startIndex, delNum, insertItem)
1
2
3
4var x = [14, 3, 77]
var y = x.splice(1, 2)
console.log(x) // [14]
console.log(y) // [3, 77]
slice()
:新建并返回一个截取原数组的新数组。原数组不会改变arr.slice(startIndex, endIndex)
:返回arr
的startIndex ~ endIndex-1
项arr.slice(startIndex)
:返回arr
的startIndex ~ 尾
项
indexOf && lastIndexOf
:参数既可为index
亦可为value
。若返回“-1”则表示未找到
迭代方法
every(func)
:全真则真some(func)
:一真则真filter(func)
:返回true
项组成的数组forEach(func)
:对数组每一项执行函数map(func)
:对数组每一项执行函数,并返回调用结果组成的数组1
2
3
4
5
6var arr = [1, 2, 3]
var mapResult = arr.map((item, index, array)=>{
return item*2
})
arr // [1, 2, 3]
mapResult // [2, 4, 6]
归并方法
reduce && reduceRight
:迭代数组所有项并构建一个最终返回的值reduce(func [,initialVal])
:从数组的第一项开始逐个遍历到最后reduceRight(func [,initialVal)
:从数组的最后一项开始,向前遍历到第一项1
2
3
4
5
6
7// 求数组中所有值之和
var arr = [1, 2, 3]
var sum = arr.reduce((prev, cur, index, array)=>{
console.log(prev, cur, index)
return prev + cur
})
console.log(sum) // 6
数组排序
冒泡排序
1 | var arr = [1, 9, 4, 50, 49, 6, 3, 2]; |
sort()
1 | var arr = [1, 9, 4, 50, 49, 6, 3, 2]; |
数组去重
方法1
1 | var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0] |
方法2
1 | var arr = [1, 1, 4, 50, 50, 6, 2, 2]; |
ES6
1 | var arr = [1, 1, 4, 50, 50, 6, 2, 2]; |
数组降维
1 | let arr = [[1],[9, [6, 8, [5, [10]]]]] |
摒弃了递归的做法,带来了性能上极大的提升。