ECMAScript6新特性数组扩展(扩展运算符新增方法一新增方法二新增方法三)-全面详解(学习总结---从入门到深化)

Posted 童小纯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ECMAScript6新特性数组扩展(扩展运算符新增方法一新增方法二新增方法三)-全面详解(学习总结---从入门到深化)相关的知识,希望对你有一定的参考价值。

👏作者简介:大家好,我是小童,Java开发工程师,CSDN博客博主,Java领域新星创作者
📕系列专栏:前端、Java、Java中间件大全、微信小程序、微信支付、若依框架、Spring全家桶
📧如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀
🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦
🍂博主正在努力完成2023计划中:以梦为马,扬帆起航,2023追梦人

数组扩展_扩展运算符

 扩展运算符(spread)是三个点( ... )。将一个数组转为用逗号分隔的参数序列

console.log(...[1, 2, 3])
// 1 2 3

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

[...document.querySelectorAll('div')]
// [<div>, <div>, <div>]

该运算符主要用于函数调用

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

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

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

替代函数的 apply 方法

由于扩展运算符可以展开数组,所以不再需要 apply 方法,将数组转为函数的参数了

// ES5 的写法
Math.max.apply(null, [14, 3, 77])
// ES6 的写法
Math.max(...[14, 3, 77])
// 等同于
Math.max(14, 3, 77);

合并数组

扩展运算符提供了数组合并的新写法

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' ]

实时效果反馈

1. 下列代码,获取数组的最大值,划横线处填写的代码是:

Math.max(___[14, 3, 77])

A apply

B call

C ...

D concat

 数组扩展_新增方法(一)

Array.from()

Array.from 方法用于将类数组转为真正的数组

 arguments

function add()
    let collect = Array.from(arguments);
    collect.push(40);
    console.log(collect);

add(10,20,30)

元素集合

let divs = document.querySelectorAll('div');
console.log(Array.from(divs));

类似数组的对象

let arrayLike = 
    '0': 'a',
    '1': 'b',
    '2': 'c',
    length: 3
;
let arr = Array.from(arrayLike);
console.log(arr);

Array.of()

Array.of() 方法用于将一组值,转换为数组

Array.of(3, 11, 8) // [3,11,8]

这个方法的主要目的,是弥补数组构造函数 Array() 的不足。因为参数 个数的不同,会导致 Array() 的行为有差异。

Array() // []
Array(3) // [, , ,]
Array(3, 11, 8) // [3, 11, 8]
Array.of(3) // [3]
Array.of(3).length // 1

实时效果反馈

1. 下列代码输出结果是什么: 

Array.of(3)
Array(3)

A [3] [3]

B [,,] [,,]

C [,,] [3]

D [3] [,,]

 数组扩展_新增方法(二)

 copyWithin()

数组实例的 copyWithin() 方法,在当前数组内部,将指定位置的成员复制到其他位置(会覆盖原有成员),然后返回当前数组。也就是说,使用这个方法,会修改当前数组。

Array.prototype.copyWithin(target, start = 0, end = this.length)

它接受三个参数

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

find() 和 findIndex()

数组实例的 find 方法,用于找出第一个符合条件的数组成员。它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出 第一个返回值为 true 的成员,然后返回该成员。如果没有符合条件的 成员,则返回 undefined

[1, 5, 10, 15].find(function(value, index,arr) 
  return value > 9;
) // 10

 数组实例的 findIndex 方法的用法与 find 方法非常类似,返回第一个符 合条件的数组成员的位置,如果所有成员都不符合条件,则返 回 -1 。

[1, 5, 10, 15].findIndex(function(value,
index, arr) 
  return value > 9;
) // 2

另外,这两个方法都可以发现 NaN ,弥补了数组的 indexOf 方法的不足。

[NaN].indexOf(NaN)
// -1
[NaN].findIndex(function(value, index, arr)
    if(Number.isNaN(value))
        console.log(index); // 0
   
)

fill()

fill 方法使用给定值,填充一个数组

new Array(3).fill(7)
// [7, 7, 7]
['a', 'b', 'c'].fill(7)
// [7, 7, 7]

fill 方法还可以接受第二个和第三个参数,用于指定填充的起始位置和结束位置

['a', 'b', 'c'].fill(7, 1, 2)
// ['a', 7, 'c']

entries(),keys() 和 values()

ES6 提供三个新的方法—— entries()keys() values() ——用于遍历数 组。可以用 for...of 循环进行遍历,唯一的区别是 keys() 是对键名的遍 历、 values() 是对键值的遍历, entries() 是对键值对的遍历。

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"

实时效果反馈

1. 下列那个数组方法可以填充数组:

A copyWithin()

B find() findIndex()

C fill

D entries(),keys() 和 values()

 数组扩展_新增方法(三)

 includes()

includes 方法返回一个布尔值,表示某个数组是否包含给定的值,与字符串的 includes 方法类似。ES2016 引入了该方法

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

该方法的第二个参数表示搜索的起始位置,默认为 0

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

indexOf 方法有两个缺点,一是不够语义化,它的含义是找到参数值 的第一个出现位置,所以要去比较是否不等于 -1 ,表达起来不够直 观。二是,它内部使用严格相等运算符( === )进行判断,这会导 致对 NaN 的误判

[NaN].indexOf(NaN)
// -1
[NaN].includes(NaN)
// true

flat()

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

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

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

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

at()

at() 方法接受一个整数作为参数,返回参数指定位置的字符,支持负索引(即倒数的位置)。

const arr = [5, 12, 8, 130, 44];
arr.at(2) // 8
arr.at(-2) // 130

实时效果反馈

1. 下列那个数组方法是否包含给定的值,并且可以识别 NaN :

A includes()

B indexOf()

C flat()

D at()

ES6新特性:扩展运算符 三个点(...)基础学习

说明

扩展运算符(spread)是三个点(…), 将一个数组转为用逗号分隔的参数序列 。

简单用法

//基础用法
console.log(...[1, 2, 3]); //输出 :1 2 3
console.log(1, ...[2, 3, 4], 5); //输出 :1 2 3 4 5

//进阶用法1(函数传参)
let print = (x, y) => 
	return x + y
;
let number = [1, 2];
console.log(print(...number)); //输出: 3

//进阶用法2(数组合并)
let arr = [...[1, 2, 3], ...[4, 5, 6]];
console.log(arr); //输出[1,2,3,4,5,6]

//进阶用法3(与解构表达式结合)
const [first, ...rest] = [1, 2, 3, 4];
console.log(first, rest); //输出: 1 [2,3,4]

//进阶用法4(将字符串转成数组)
console.log([..."hello"]) //输出: ["h","e","l","l","o"]

以上是关于ECMAScript6新特性数组扩展(扩展运算符新增方法一新增方法二新增方法三)-全面详解(学习总结---从入门到深化)的主要内容,如果未能解决你的问题,请参考以下文章

ES6新特性:扩展运算符 三个点(...)基础学习

ECMAScript6数组的扩展

web前端技巧-ES6新特性与重点知识汇总

javascript ES6 新特性之 扩展运算符 三个点 ...

ECMAscript6新特性之解构赋值

使用扩展运算符克隆带有数组的对象