es6随手记---数组篇

1.  ...有两种情况

1.rest参数    形式为 ...变量名    另外rest参数只能作为参数的最后一个出现,不然报错。

function a(a,...b) {
   console.log(a)          // 1
   console.log(b)          // [2,3,4,5,6]
}


a(1,2,3,4,5,6)

2.扩展运算符...   这种情况为rest参数的逆运算,将参数转成用逗号隔开的参数序列。...后面也可以跟表达式

let a = [1,2,3,4,5]

console.log(...a)    // 1,2,3,4,5

使用扩展运算符就能代替很多方法。

Math.max(...[14,3,77])
//等同于
Math.max(14,3,77)

let b = [1,2,3,4]
function a(...b) {}
//等同于
functiong a(1,2,3,4) {}

//还可以用来深拷贝数组,正常的复制数组,指向的是同样的位置,会同时改变两个数组
let  a= [1,2,3]
let  b= [...a]
//等同于
let  [...b] = a    //这种方法,同时使用了解构语法

//合并数组
let a=[1,2]
let b=[2,3]
let c=[...a,...b]    //c=[1,2,2,3]

//其他用法  和解构语法结合
[a,...b] = list  //a=list[0]  b就是去掉list[0]之后的数组

//将字符串转成数组
a='hello'
b=[...a]   // ['h','e','l','l','o']

使用扩展运算符可以将很多内置遍历器(Iterator)的对象转化成数组。

let a={
  '0': 'a',
  '1': 'b',
  length: 3
}
//a是个类似数组的对象,使用扩展运算符没法转化成真正的数组,使用Array.from()可以转成真正的数组。

2.Array.from()  可以将很多内置内置遍历器的对象转成数组,类似数组的独享也可以。它还可以接受第二个参数,第二个参数类似于数组的map方法,可以用来对每一个参数进行处理

let a={
  '0': 'a',
  '1': 'b',
  length: 3
}

let b = Array.from(a)   //['a','b']

//Array.from()传入第二个参数,对每个参数进行操作
let c=Array.from(a,(i) => {i=0})  //[0,0]

//如果第二个参数处理使用了this关键字,可以传入第三个参数,用来绑定this

//还可以用来把字符串转成数组,然后返回正确字符串长队,避免js把大于\uFFF的字符算作两个字符的bug

3.Array.of()将一组值,转成数组

Array.of(1,2,3)   // [1,2,3]

4.数组的实例方法copyWithin()

[1,2,3,4].copcWithin(0,2,3)   //[3,2,3,4]

//一共三个参数,第一个为必需,从那个位置开始替换,第二个参数从哪个位置开始,第三个参数到那个位置结
//束,后两个参数选下来的参数复制到第一个参数开始的位置,三个参数都可为负数,表示到数。

5.数组的实例方法find()和findIndex() 

find()    用来找到第一个符合条件的数组成员,并返回,如果找不到返回undefined.

findIndex() 和find()方法类似,返回值为第一个符合条件的数组位置。

以上两个方法都可以传入第二个参数,用来绑定this

[1,0,5,9].find((i) => {return i > 8})   //9

let person = {age: 8,name: 'a'}
[1,0,2,10].finde((i) => {return i > this.age},person)  //10

6.数组的实例方法fill()  使用给定值,填充一个数组,可以传入三个参数,第一个是给定值,填充对象,后两个参数用来确定填充的位置。如果填充的对象类型是对象,那么对填充后的数组操作时每个填充上的对象都会改变,也就是填充的是同一个地址的对象,为浅拷贝。

[1,2,3].fill(9)   //[9,9,9]
[1,2,3].fill(9,1,2) //[1,9,3]

let arr = [1,2,3]
arr.fill({name: 'a'}) //此时{name:'a'}这个对象被浅拷贝了三次,然后填充到数组中
arr[0].name = 'b'   // arr = [{name:'b'},{name: 'b'},{name: 'b'}]
 

7. 数组的实例方法 entries()  keys()  values() 用于遍历数组,分别返回键值对,键,值。

for (let index of ['a', 'b'].keys()) {
  console.log(index);
}
// 0
// 1

for (let elem of ['a', 'b'].values()) {
  console.log(elem);
}
// 'a'
// 'b'

for (let [index, elem] of ['a', 'b'].entries()) {
  console.log(index, elem);
}
// 0 "a"
// 1 "b"

8.数组实例方法includes()  用来查找数组中是否含有给定的值 ,返回布尔值,可以用来判断NaN,比indexOf()好用.

[1,2,3].includes(2)  //true

9.数组实例方法 flat()   可以将多维数组拉伸成一维数组,数组内值位置不变,返回新数组,另外可以自动去掉空位

[1,[2,3]].flat()   // [1,2,3]   默认展开一层,也可以传参,展开多层
[1,2,[[3,4],5],6].flat(2)  //[1,2,3,4,5,6]   //或者传入Infinity,有几层展开几层
[1,2,[[3,4],5],6].flat(Infinity)  //[1,2,3,4,5,6]

[1,,3,4].flat()   //[1,3,4]    自动把空位去掉

flatMap()  可以传入两个参数,第二个参数可以用来绑定this对象,第一个参数是一个函数(可以传三个值,当前数组成员,当前数组成员位置,原数组),可以用来对每个值操作,然后执行flat()方法,但是只能展开一层,返回值组成一个新数组。

[2,3,4].flatMap(i => {[i,i*2]})  // [2,4,3,6,4,8]

10.数组空位  指数组某一个位置没有任何值,不是undefined,对数组空位的处理每个方法都不一样,尽量避免出现,可以使用flat()方法把空位去掉。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值