ES6 知识碎片2

比眉伴天荒 2022-04-23 03:22 327阅读 0赞
  • RegExp 具名组匹配

ES2018 引入了具名组匹配(Named Capture Groups),允许为每一个组匹配指定一个名字,既便于阅读代码,又便于引用。同时,数字序号(matchObj[1])依然有效。

  1. const RE_DATE = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/;
  2. const matchObj = RE_DATE.exec('1999-12-31');
  3. const year = matchObj.groups.year; // 1999
  4. const month = matchObj.groups.month; // 12
  5. const day = matchObj.groups.day; // 31

如果具名组没有匹配,那么对应的groups对象属性会是undefined。

  1. const RE_OPT_A = /^(?<as>a+)?$/;
  2. const matchObj = RE_OPT_A.exec('');
  3. matchObj.groups.as // undefined
  4. 'as' in matchObj.groups // true

上面代码中,具名组as没有找到匹配,那么matchObj.groups.as属性值就是undefined,并且as这个键名在groups是始终存在的。

  • 函数的 length 属性

指定了默认值以后,函数的length属性,将返回没有指定默认值的参数个数。也就是说,指定了默认值后,length属性将失真。

  1. (function (a) { }).length // 1
  2. (function (a = 5) { }).length // 0
  3. (function (a, b, c = 5) { }).length // 2

这是因为length属性的含义是,该函数预期传入的参数个数。某个参数指定默认值以后,预期传入的参数个数就不包括这个参数了。同理,后文的 rest 参数也不会计入length属性。

  1. (function(...args) { }).length // 0

如果设置了默认值的参数不是尾参数,那么length属性也不再计入后面的参数了。

  1. (function (a = 0, b, c) { }).length // 0
  2. (function (a, b = 1, c) { }).length // 1
  • 数组实例的 flat()

数组的成员有时还是数组,Array.prototype.flat()用于将嵌套的数组“拉平”,变成一维的数组。该方法返回一个新数组,对原数据没有影响

  1. [1, 2, [3, 4]].flat()
  2. // [1, 2, 3, 4]

flat()默认只会“拉平”一层,如果想要“拉平”多层的嵌套数组,可以将flat()方法的参数写成一个整数,表示想要拉平的层数,默认为1

  1. [1, 2, [3, [4, 5]]].flat()
  2. // [1, 2, 3, [4, 5]]
  3. [1, 2, [3, [4, 5]]].flat(2)
  4. // [1, 2, 3, 4, 5]

如果不管有多少层嵌套,都要转成一维数组,可以用Infinity关键字作为参数。

  1. [1, [2, [3]]].flat(Infinity)
  2. // [1, 2, 3]

如果原数组有空位,flat()方法会跳过空位。

  1. [1, 2, , 4, 5].flat()
  2. // [1, 2, 4, 5]
  • 数组实例的 flatMap()

flatMap()方法对原数组的每个成员执行一个函数(相当于执行Array.prototype.map()),然后对返回值组成的数组执行flat()方法。该方法返回一个新数组,不改变原数组。

  1. // 相当于 [[2, 4], [3, 6], [4, 8]].flat()
  2. [2, 3, 4].flatMap((x) => [x, x * 2])
  3. // [2, 4, 3, 6, 4, 8]

flatMap()只能展开一层数组。

  1. // 相当于 [[[2]], [[4]], [[6]], [[8]]].flat()
  2. [1, 2, 3, 4].flatMap(x => [[x * 2]])
  3. // [[2], [4], [6], [8]]

上面代码中,遍历函数返回的是一个双层的数组,但是默认只能展开一层,因此flatMap()返回的还是一个嵌套数组。

  • Set

ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。

  1. 展示了一种去除数组重复成员的方法。

    […new Set(array)]

  2. 展示了一种去除字符串里面的重复字符。

    […new Set(“abcddeeee”)].join(‘’);//abcde

发表评论

表情:
评论列表 (有 0 条评论,327人围观)

还没有评论,来说两句吧...

相关阅读

    相关 碎片知识

    波士顿矩阵 用来做“市场分析”的理论,一般用于衡量产品的宏观处境。 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_tex

    相关 知识碎片

    [前段资源汇总][Link 1] [史上最全的开发和设计资源大全][Link 2] [字体图标链接][Link 3] [Chrome 开发者控制台中,你可能意想不到的功能

    相关 ES6 知识碎片2

    RegExp 具名组匹配 ES2018 引入了具名组匹配(Named Capture Groups),允许为每一个组匹配指定一个名字,既便于阅读代码,又便于引用。同