## 数组扩展
> 1.扩展运算符
2.Array.from()
3.Array.of()
4.数组实例的 copyWithin()
5.数组实例的 find() 和 findIndex()
6.数组实例的 fill()
7.数组实例的 entries(),keys() 和 values()
8.数组实例的 includes()
9.数组实例的 flat(),flatMap()
### 扩展运算符
~~~
console.log(...[1, 2, 3])
// 1 2 3
console.log(1, ...[2, 3, 4], 5)
// 1 2 3 4 5
[...document.querySelectorAll('div')]
~~~
### Array.from
~~~
let arrayLike = {
'0': 'a',
'1': 'b',
'2': 'c',
length: 3
};
// ES5的写法
var arr1 = [].slice.call(arrayLike); // ['a', 'b', 'c']
// ES6的写法
let arr2 = Array.from(arrayLike); // ['a', 'b', 'c']
~~~
### Array.of()
~~~
Array.of(3, 11, 8) // [3,11,8]
Array.of(3) // [3]
Array.of(3).length // 1
~~~
### 数组实例的 copyWithin()
~~~
// 将3号位复制到0号位
[1, 2, 3, 4, 5].copyWithin(0, 3, 4)
// [4, 2, 3, 4, 5]
// -2相当于3号位,-1相当于4号位
[1, 2, 3, 4, 5].copyWithin(0, -2, -1)
// [4, 2, 3, 4, 5]
// 将3号位复制到0号位
[].copyWithin.call({length: 5, 3: 1}, 0, 3)
// {0: 1, 3: 1, length: 5}
~~~
### 数组实例的 find() 和 findIndex()
~~~
[1, 4, -5, 10].find((n) => n < 0)
~~~
~~~
[1, 5, 10, 15].findIndex(function(value, index, arr) {
return value > 9;
}) // 2
~~~
### 数组实例的 fill()
~~~
['a', 'b', 'c'].fill(7)
// [7, 7, 7]
new Array(3).fill(7)
// [7, 7, 7]
['a', 'b', 'c'].fill(7, 1, 2)
// ['a', 7, 'c']
~~~
~~~
let arr = new Array(3).fill({name: "Mike"});
arr[0].name = "Ben";
arr
// [{name: "Ben"}, {name: "Ben"}, {name: "Ben"}]
let arr = new Array(3).fill([]);
arr[0].push(5);
arr
// [[5], [5], [5]]
~~~
### 数组实例的 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"
~~~
### 数组实例的 includes()
~~~
[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
[1, 2, 3].includes(3, -1); // true
~~~
### 数组实例的 flat(),flatMap()
flat()默认只会“拉平”一层,如果想要“拉平”多层的嵌套数组,可以将flat()方法的参数写成一个整数,表示想要拉平的层数,默认为1。
~~~
[1, 2, [3, 4]].flat()
[1, 2, [3, [4, 5]]].flat()
// [1, 2, 3, [4, 5]]
[1, 2, [3, [4, 5]]].flat(2)
// [1, 2, 3, 4, 5]
~~~
如果不管有多少层嵌套,都要转成一维数组,可以用Infinity关键字作为参数
~~~
[1, [2, [3]]].flat(Infinity)
// [1, 2, 3]
~~~
如果原数组有空位,flat()方法会跳过空位
~~~
[1, 2, , 4, 5].flat()
// [1, 2, 4, 5]
~~~
flatMap()方法对原数组的每个成员执行一个函数(相当于执行Array.prototype.map()),然后对返回值组成的数组执行flat()方法。该方法返回一个新数组,不改变原数组。
~~~
[2, 3, 4].flatMap((x) => [x, x * 2])
// [2, 4, 3, 6, 4, 8]
~~~
~~~
[1, 2, 3, 4].flatMap(x => [[x * 2]])
// [[2], [4], [6], [8]]
~~~
### 课后习题
1.下面的代码运行结果是
~~~
var s = [1,2,3];
var f = [...s,1,2,3];
console.log(f);
~~~
~~~
var s = [1, 2, 3, 4, 5].copyWithin(0, -3, -1)
console.log(s);
~~~
~~~
var s = ['a', 'b', 'c', 'd'].fill(1, 1, 2);
console.log(s);
~~~
~~~
for (let index of ['a', 'b', 'c'].keys()) {
console.log(index);
}
~~~
~~~
var s = [2, 3, 4];
var l = s.flatMap((x) => [x, x - 2]);
console.log(s);
console.log(l);
~~~
- Less
- 课程规划
- Less概述
- 变量
- 混合
- 嵌套
- 继承
- 导入
- 函数
- 其他
- 实战
- ES6
- 课程规划
- ES6概述
- let和const命令
- 变量的解构赋值
- 字符串扩展
- 函数扩展
- 数组扩展
- Set和Map数据结构
- Symbol
- Generator 函数
- Promise对象
- Class语法
- Module 的语法
- ES7和ES8
- 实战
- VUE
- 课程规划
- vue概述
- vue实例
- 模版语法
- 计算属性和侦听器
- Class和Style的绑定
- 条件渲染
- 列表渲染
- 事件处理
- 表单输入绑定
- 组件基础
- 过渡和动画
- 自定义指令
- 过滤器
- 响应式原理
- 实战课程
- Node
- 课程规划
- 课程概述
- node入门实例
- 模块系统
- 回调函数
- 全局对象
- 常用模块介绍
- 常用模块介绍-1
- 常用模块介绍-2
- 常用模块介绍-3
- npm使用
- express的使用
- express的使用-1
- webpack基础
- 实战
- 微信小程序
- 课程规划
- 课程概述
- 基本配置和生命周期
- wxml模版
- wxss
- wxs
- 组件
- 微信API
- 自定义组件开发
- 实战小程序
- Element
- 课程规划
- 课程概述
- 特性介绍
- 组件介绍-基础组件
- 组件介绍-表单组件
- 组件介绍-数据展示组件
- 组件介绍-提示组件
- 组件介绍-导航组件
- 组件介绍-其他组件
- 综合案例