Array 一、创建数组 new
操作符:1 2 const arr = new Array (5 )const arr1 = new Array ('w' ,'e' ,'s' ,'l' ,'e' ,'y' )
省略new
操作符: 1 2 const arr = Array (5 )const arr1 = Array ('w' ,'e' ,'s' ,'l' ,'e' ,'y' )
数组字面量 1 2 const arr = []const arr1 = ['w' ,'e' ,'s' ,'l' ,'e' ,'y' ]
[es6]Array.of()
和Array
构造函数之间的区别在于处理参数中的整数
1 2 const arr = Array (5 ) cosnt arr1 = Array .of(5 )
[es6]Array.from()
将一个类数组(拥有length属性的对象) 和 可遍历对象(部署iterable接口的对象,包括 Set/Map) 转为真正的数组
参数:
arrayLike
: 想要转换成数组的伪数组对象或可迭代对象。
mapFn
可选: 如果指定了该参数,新数组中的每个元素会执行该回调函数。
thisArg
可选: 可选参数,执行回调函数 mapFn
时 this
对象
二、数组方法 1.转换方法 toString()
返回数组的字符串形式
该字符串由数组中的每个元素的 toString()
返回值经调用 join()
方法连接(由逗号隔开)组成
不改变原数组
1 2 3 const arr = ['w' ,'e' ,'s' ,'l' ,'e' ,'y' ]console .log(arr.toString()) console .log(typeof arr.toString())
toLocaleString()
该字符串由数组中的每个元素的 toLocaleString()
返回值经调用 join()
方法连接(由逗号隔开)组成
数组中的元素将调用各自的 toLocaleString 方法
不改变原数组
1 2 3 const arr= [{name :'zz' }, 123 , "abc" , new Date ()];console .log(arr.toLocaleString())
join()
将数组中的所有元素连接成一个字符串
不改变原数组,返回新字符串
1 2 3 4 const arr = ['w' ,'e' ,'s' ,'l' ,'e' ,'y' ]console .log(arr.join()) console .log(arr.join('' )) console .log(arr.join(' ' ))
2.栈/队列方法 push()
向数组的尾部追加项
返回的是数组的新长度
改变原数组
1 2 3 const arr1 = ['wesley' ]console .log(arr1.push('deborah' )) console .log(arr1)
pop()
删除一个数组中的最后的一个元素,并且返回这个元素
改变原数组
1 2 3 const arr1 = ['wesley' ,'deborah' ,'lalala' ]console .log(arr1.pop()) console .log(arr1)
shift()
1 2 3 const arr1 = ['lalala' ,'wesley' ,'deborah' ]console .log(arr1.shift()) console .log(arr1)
unshift()
1 2 3 const arr1 = ['love' ,'deborah' ]console .log(arr1.unshift('wesley' )) console .log(arr1)
3.排序方法 reverse()
颠倒数组中元素的位置,该方法返回对数组的引用
改变原数组
1 2 3 4 5 6 const arr = ['w' ,'e' ,'s' ,'l' ,'e' ,'y' ]console .log(arr) const arr2 = arr.reverse() console .log(arr) console .log(arr2) console .log(arr===arr2)
sort()
对数组进行排序,默认情况下,按照升序排序,sort
方法调用每个数组项的 toString() 方法,进行字符串比较
语法:arr.sort([comparefn])
返回排序后的数组
改变原数组
如果指明了comparefn,数组将按照调用该函数的返回值来排序。若 a 和 b 是两个将要比较的元素:
若 comparefn(a, b) < 0,那么a 将排到 b 前面;
若 comparefn(a, b) = 0,那么a 和 b 相对位置不变;
若 comparefn(a, b) > 0,那么a , b 将调换位置;
concat()
将传入的数组或者元素与原数组合并,组成一个新的数组并返回,可以实现浅拷贝
不改变原数组
1 2 3 const arr1 = ['my' ,'name' ]const arr2 = ['wesley' ]console .log(arr1.concat('is' ,arr2))
slice()
将数组中一部分元素浅拷贝存入新的数组对象,并且返回这个数组对象
接收一或两个参数,分别是返回项的起始和结束位置
返回一个新的数组对象
不改变原数组
1 2 3 const arr = ['w' ,'e' ,'s' ,'l' ,'e' ,'y' ]console .log(arr.slice()) console .log(arr.slice(2 ,4 ))
splice()
对数组的项进行 删除、插入、替换 等操作,功能十分强大
第一个参数:要删除的第一项的位置 第二个参数:要删除的项数 第三个参数(第四个、第五个……):插入的项
返回由删除的项组成的数组
改变原数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 var array = ["apple" ,"boy" ];var splices = array.splice(1 ,1 );console .log(array); console .log(splices); array = ["apple" ,"boy" ]; splices = array.splice(2 ,1 ,"cat" ); console .log(array); console .log(splices); array = ["apple" ,"boy" ]; splices = array.splice(-2 ,1 ,"cat" ); console .log(array); console .log(splices); array = ["apple" ,"boy" ]; splices = array.splice(-3 ,1 ,"cat" ); console .log(array); console .log(splices); array = ["apple" ,"boy" ]; splices = array.splice(0 ,3 ,"cat" ); console .log(array); console .log(splices);
删除数组中指定元素
1 2 const array = ['a' ,'b' ,'c' ];array.splice(array.indexOf('b' ),1 );
[ES6]copyWithin()
在数组内部,将指定位置的成员拷贝到其他位置(会覆盖原有成员)
参数copyWithin(target, start, end)
复制序列到该位置,开始复制元素的起始位置,开始复制元素的结束位置(不包括这个位置的元素)
改变原数组
1 2 3 4 5 6 7 8 9 10 11 [1 , 2 , 3 , 4 , 5 ].copyWithin(-2 ) [1 , 2 , 3 , 4 , 5 ].copyWithin(0 , 3 ) [1 , 2 , 3 , 4 , 5 ].copyWithin(0 , 3 , 4 ) [1 , 2 , 3 , 4 , 5 ].copyWithin(-2 , -3 , -1 )
[ES6]fill()
将数组指定区间内的元素替换为某个值
arr.fill(value, start, end = this.length)
改变原数组
1 2 const arr = ['w' , 'e' , 's' , 'l' , 'e' , 'y' ]console .log(arr.fill('s' ,0 ,3 ))
4.查找/位置方法 indexOf()
查找元素在数组中正向第一次出现时的索引,如果没有,则返回-1
不改变原数组
1 2 3 4 5 const array = ['abc' , 'def' , 'ghi' ,'123' ];console .log(array.indexOf('def' )); console .log(array.indexOf('def' ,-1 )); console .log(array.indexOf('def' ,-4 )); console .log(array.indexOf(123 ));
lastIndexOf()
查找元素在数组中逆向第一次出现时的索引,如果没有,则返回-1
不改变原数组
1 2 3 4 5 const array = ['abc' , 'def' , 'ghi' , '123' ];console .log(array.lastIndexOf('def' )); console .log(array.lastIndexOf('def' , -1 )); console .log(array.lastIndexOf('def' , -4 )); console .log(array.lastIndexOf(123 ));
[es6]find()
[es6]findIndex()
find()返回数组中第一个满足条件的元素(如果有的话), 如果没有,则返回undefined
findIndex()返回数组中第一个满足条件的元素的索引(如果有的话)否则返回-1
1 2 3 4 5 6 7 8 9 10 11 var array = [1 , 3 , 5 , 7 , 8 , 9 , 10 ];function f (value, index, array ) { return value%2 ==0 ; } function f2 (value, index, array ) { return value > 20 ; } console .log(array.find(f)); console .log(array.find(f2)); console .log(array.findIndex(f)); console .log(array.findIndex(f2));
[es7]includes()
判断当前数组是否包含某个指定的值,如果是,则返回 true,否则返回 false。
arr.includes(element, fromIndex=0)
1 2 3 4 var array = [-0 , 1 , 2 ];console .log(array.includes(+0 )); console .log(array.includes(1 )); console .log(array.includes(2 ,-4 ));
5.迭代方法 forEach()
every()
some()
filter()
map()
描述:迭代数组,对数组的每一项执行给定函数
参数:第一个参数:函数func 函数接收三个参数
1、数组的项`currentValue`
2、该项在数组中的位置`index`
3、数组对象本身`array`
第二个参数:第一个参数的执行环境(this指向)
返回值: forEach() 无返回值(undefined)
every() 对数组运行给定函数,如果该函数对每一项都返回true,则返回true
some() 对数组运行给定函数,如果该函数对任意一项返回true,则返回true
filter() 对数组执行给定函数,返回该函数返回true的项组成的数组
map() 对数组执行给定函数,返回每次函数调用结果组成的数组
例:在数组 arr 中,查找值与 item 相等的元素出现的所有位置
1 2 3 4 5 arr.map((curitem,index )=> { if (curitem===item ) { return index } })
例:为数组 arr 中的每个元素求二次方。不要直接修改数组 arr,结果返回新的数组
1 arr.map((item )=> item*item)
例:找出数组 arr 中重复出现过的元素
1 2 3 arr.filter((item,index,arr )=> { return arr.indexOf(item) !== arr.lastIndexOf(item) && index === arr.indexOf(item) })
例:统计数组 arr 中值等于 item 的元素出现的次数
1 2 3 4 5 6 arr.reduce((count,currentitem )=> { if (currentitem === item ) { count++ } return count },0 )
例:给定字符串 str,检查其是否包含连续重复的字母(a-zA-Z),包含返回 true,否则返回 false
1 2 3 4 const arr = str.split('' ) return arr.some((item,index,arr )=> { return arr.indexOf(item) === arr.lastIndexOf(item)-1 && (item >= 'a' && item <= 'z' || item >= 'A' && item <= 'Z' ) })
6.归并方法 reduce()
对数组中的每个元素执行一个callback函数(升序执行),将其结果汇总为单个返回值
arr.reduce(callback(accumulator, currentValue, index, array), initialValue])
callback函数接收4个参数:
accumulator (acc) (累计器)
current Value (cur) (当前值)
current Index (idx) (当前索引)
source Array (src) (源数组)
initialValue: 作为第一次调用 callback
函数时的第一个参数的值。 如果没有提供初始值,则将使用数组中的第一个元素。 在没有初始值的空数组上调用 reduce 将报错
1 2 3 4 5 6 7 const PaymentsList = storePayments.reduce( (result, currentPayment) => { if (selected.includes(currentPayment.paymentCode)) result.push(currentPayment.paymentTitle) return result }, [], )