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