美文网首页让前端飞程序员
ES6特性学习(三):Array数组的特性扩展(查找,包含,复制

ES6特性学习(三):Array数组的特性扩展(查找,包含,复制

作者: toyfish | 来源:发表于2019-03-22 16:47 被阅读20次

1、扩展运算符[...]
扩展运算符(spread)是三个点(...)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列。

function push(array, ...items) {
  array.push(...items);
}

function add(x, y) {
  return x + y;
}

const numbers = [4, 38];
add(...numbers) // 42

上面的代码中 扩展运算符 分别把原本的数组参数给分解成了多个参数并按下标顺序传入到函数中。
合理使用可以大大的简化传参的复杂性。
特性应用

  • 数组克隆
    数组是复合的数据类型,直接复制的话,只是复制了指向底层数据结构的指针,而不是克隆一个全新的数组。

    const a1 = [1, 2];
    const a2 = a1;// 只是传递了引用,并没有在内存中新生成一个数组
    
    a2[0] = 2;
    a1 // [2, 2]
    

    使用 ... 可以很好的解决这个问题

     const a1 = [1,2]
     const a2 = [...a1] // 在内存中完全克隆一个新的数组
    
  • 数组合并

      const arr1 = ['a', 'b'];
      const arr2 = ['c'];
      const arr3 = ['d', 'e'];
    
      // ES5 的合并数组
      arr1.concat(arr2, arr3);
      // [ 'a', 'b', 'c', 'd', 'e' ]
    
      // ES6 的合并数组
      [...arr1, ...arr2, ...arr3]
      // [ 'a', 'b', 'c', 'd', 'e' ] 
    

    这两种方法都是浅拷贝,对于参与合并数组中元素的改动会影响合并后的数组。

  • 将字符串转换成数组

    [...'hello']
    // [ "h", "e", "l", "l", "o" ]
    

    在能使用ES6的前提下,更推荐使用这种方式来判断字符串的长,因为可以正确的识别Unicode字符。

    'x\uD83D\uDE80y'.length // 4
    [...'x\uD83D\uDE80y'].length // 3
    

所以在ES6前提下关于Unicode字符的问题,都应该使用...来进行操作,保证正确性。
2、Array.find()与Array.findIndex()

  • Array.find()
    数组实例的find方法,用于找出第一个符合条件的数组成员。它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该成员。如果没有符合条件的成员,则返回undefined
    接收三个参数 [当前值下标原数组]

    [1,2,3,-1,-10].find((value, index, arr) => n < 0) 
    // -1
    
  • Array.findIndex()
    find()使用方式相同,但是返回的是第一个符合条件的对象的下标,如果没有符合条件的返回-1

    [1, 5, 10, 15].findIndex((value, index, arr) => value > 9)
     // 2
    
  • Array.includes()
    Array.prototype.includes方法返回一个布尔值,表示某个数组是否包含给定的值,与字符串的includes方法类似。ES2016 引入了该方法。
    接收两个参数[需要判断的元素,起始位置]

    [1, 2, 3].includes(2)     // true
    [1, 2, 3].includes(4)     // false
    [1, 2, NaN].includes(NaN) // true
    [1, 2, 3].includes(3, 3);  // false
    

    在可以使用ES6的前提下,应使用此方法判断数组中是否包含某元素,而不是使用ES5中的indexof判断是否>-1

相关文章

  • ES6特性学习(三):Array数组的特性扩展(查找,包含,复制

    1、扩展运算符[...]扩展运算符(spread)是三个点(...)。它好比 rest 参数的逆运算,将一个数组转...

  • es6数组的扩展

    es6中数组较es5增加了很多特性。先简单总结一下,方便自己学习记忆。新增特性: 扩展运算符(...),将一个数组...

  • ES6的新特性3:数组的扩展

    ES6给数组添加了一些新特性,以下介绍的是新增数组的方法。 1:Array.from Array.from作用是可...

  • ES6快速学习(四)扩展运算符

    扩展运算符 => ... 快速复制一个数组 ES6以前 Array.from() 详细使用请点击Array.f...

  • JS即将发布数组的4个新特性

    新特性总览:at(): 数组支持索引查询Array Group: 数组元素分类;Array find from l...

  • es6-数组扩展

    数组新增特性 Array.from Array.of copyWithin find\findIndex fill...

  • Set结构

    内容来自于阮一峰老师的《ES6入门》本文主要是对内容进行梳理,方便自己学习,可随意复制转载 一、特性 类似数组,成...

  • (二)9.数值扩展19-08-08

    ES6语法 数值扩展 数值新增特性和方法调整 1.新增方法 (还有三角函数、对数等不常用,用到可自行查找) 1....

  • es6入门

    一、解构赋值 数组的解构赋值 二、 对象解构赋值 三、正则新特性 四、字符串扩展 五、数值扩展 六、数组扩展 七、...

  • ES6中对象的扩展

    ES6不仅为字符串、数值和数组带来了扩展,也为对象带来了很多新特性。这一节,我们来一起学习一下对象的扩展。 对象的...

网友评论

    本文标题:ES6特性学习(三):Array数组的特性扩展(查找,包含,复制

    本文链接:https://www.haomeiwen.com/subject/sarrvqtx.html