IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 关于阅读 ES6- 数组 整理的问题 -> 正文阅读

[游戏开发]关于阅读 ES6- 数组 整理的问题

1、什么是扩展运算符

答:由三个点号(…)表示,可以将数组转化为用逗号分隔的参数序列

2、扩展运算符的用处

答:函数的rest剩余参数获取
用于深度拷贝一个数组
用于代替Math的求最大值方法: Math.max.apply(null, arr) -> Math.max(…arr)
用于代替数组的拼接concat:arr1.concat(arr2) -> […arr1, …arr2]
用于代替数组的push方法 :Array.prototype.push.apply(arr1, arr2) -> arr1.push(…arr2)
打散字符串:let arr = […‘hello’]
替代函数的apply方法,进行数组入参的打散 func.apply(null, arr) -> func(…[arr])
可以将部署了 iterator接口的类数组转为数组:let div = document.querySelectorAll(‘div’); let arr = […div]

3、对于没有部署iterator接口的类数组怎么转为数组

答:使用 Array.from()方法
let likeArr = {
‘0’: ‘aaa’,
‘1’: ‘bbb’,
length: 2
}
let arr = Array.form(likeArr)
注意不能使用扩展运算符进行转换为数组,会报错

4、apply方法有什么特别的功效吗

答:有打散数组为参数序列的效果,例如
Math.max.apply(null, [1, 2, 3, 4]) === Math.max(1, 2, 3, 4) === Math.max(…[1, 2, 3, 4])
Array.prototype.push.apply([1, 2], [3, 4]) === [1, 2].push(…[3, 4])
new (Date.bind.apply(Date, [null, 2015, 11, 10])) === new Date(…[2015, 11, 10])

5、Array.from()的作用

答:将类数组和据有iterator接口的对象(Set Map)转为数组

6、ES5怎么将类数组转为数组

答:使用数组的slice进行转化
let likeArr = {
‘0’: ‘aaa’,
‘1’: ‘bbb’,
length: 2
}
let arr = [].slice.apply(likeArr)

7、在转换为数组方面,Array.from()比扩展运算符有什么优势吗?

答:Array.from()可以将任何具有length的类数组进行转换,扩展运算符则不行

8、Array.from(a, b)方法

答:参数a是要转换为数组的目标,参数b类似于map方法,用来对数组的每个元素进行处理
Array.form([1, 2, 3], x => x*2) // [2, 4, 6]

9、Array.of()方法

答:将一组值序列转为数组 ,例: Array.of(1,2,3,‘4’, true, {})

10、Array.of()和new Array()、Array()的区别

答:Array.of()不管参数有多少个,都能转换成数组
new Array()如果参数少于2个,则会返回空数组或者值为undefined的数组
Array.of() // [] --------------------new Array() // []-------------Array() // []
Array.of(2) // [2] ------------------new Array(2) // [undefined, undefined]-------------Array(2) // [undefined, undefined]
Array.of(2,3) // [2,3] ---------------new Array(2,3) // [2, 3]-------------Array(2,3) // [2, 3]

11、Array.of()方法用ES5怎么实现

答:function ArrayOf(){
return [].slice.call(arguments)
}

12、arr.copyWithin(target, start, end)

答:将数组指定位置的值复制到其他位置(含头不含尾)
target是开始替换数据的位置
start是开始读取数据的位置,默认是0,如果是负数,就从数组的倒数位置开始
end是结束读取数据的位置,默认为数组的length,如果是负数,就从数组的倒数位置开始
// 从 2开始的位置 到 4结束的位置(5,6)复制到从 0开始的位置,结果覆盖了 3和4
[3, 4, 5, 6, 7].copyWithin(0, 2, 4) // [5, 6, 5, 6, 7]

13、arr.find()方法

答:寻找数组中第一个符合条件的值,如果没有找到就返回 undefined。注意,可以查找到NaN
[1,2,3,4,5].find((value, index, arr) => {
console.log(value)
console.log(index)
console.log(arr)
return value > 3
}) // 4

14、arr.findIndex()方法

答:寻找数组中符合条件的第一个数值的下标index, 如果没有找到返回-1。注意,可以查找到NaN
[1,2,3,4,5].findIndex((value, index, arr) => {
console.log(value)
console.log(index)
console.log(arr)
return value > 3
}) // 3

15、数组的indexOf和findIndex 、find方法相比,有什么缺陷

答:一是不够语义化;二是内部使用严格相等(===)判断,导致无法查找到 NaN
[1,2,NaN].indexOf(NaN) // -1
[1,2,NaN].find(val => Object.is(NaN, val)) // NaN
[1,2,NaN].findIndex(val => Object.is(NaN, val)) // 2

16、arr.fill(val, startIndex, endIndex)方法

答:用来填充数组的(含头不含尾规则)
val参数:填充值,默认undefined
startIndex: 开始填充位置,默认 0
endIndex:结束填充位置
[1,2,3].fill(4) // [4,4,4]
new Array(1).fill(2)// [2]
[0,1,2,3,4].fill(2,1,3) // [0, 2, 2, 3, 4]

17、for…of与arr.keys() arr.values() arr.entries()遍历数组

答:for(let key of [1,2].keys()){} // 遍历数组 键名
for(let key of [1,2].values()){} // 遍历数组键值
for(let [key,value] of [1,2].entries()){} // 遍历数组键和值
注意:可以使用next方法代替 for…of
let entries = [1,2,3].entries()
entries.next().value // [0, 1]
entries.next().value // [1, 2]
entries.next().value // [2, 3]

18、arr.includes(value, startIndex)

答:从数组的指定位置开始查找一个数值是否存在,
如果startIndex为负数就从后往前开始查找,
如果startIndex超过数组长度就从0开始查找

19、什么是数组的空位

答:就是数组内的某个位置完全没有任何值,包括undefined。例如: [, , , ]

20、怎么判断一个数组里是否有空位

答:使用 val in arr的方法。例如:
0 in [undefined, undefined] // true
0 in [,] // false

21、ES5对数组空位的处理

答:大部分情况会忽略空位
forEach() filter() every() some() 会跳过空位
map()会跳过空位,但会保留这个值
join() toString()会把空位看成 undefined,而undefined和null会被处理成空字符串
扩展:由于ES5、ES6及数组的各个方法对空位的处理不一样,建议代码中避免空位的出现

22、ES6对空位的处理

答:将空位转为undefined
Array.form()、扩展运算符、keys() values() entries()会将空位转为undefined
copyWithin()会连空位一起复制
fill()会将空位当作正常的数组位置
for…of会遍历空位
扩展:由于ES5、ES6及数组的各个方法对空位的处理不一样,建议代码中避免空位的出现

23、flat(number)方法

答:将多层数组进行拉平,会自动跳过空位。
number默认为1,可以设置拉平的层级数,如果设置为 Infinity 可以直接转为一维数组
[1, [2, 3, [4, 5]]].flat() // [1, 2, 3, [4, 5]]
[1, [2, 3, [4, 5]]].flat(2) // [1, 2, 3, 4, 5]
[1, [2, 3, [4, 5]]].flat(Infinity) // [1, 2, 3, 4, 5]

24、flatMap(value, index,arr)方法

答:只能展开一层数组,并可以对其中的数组成员做处理
[1, 2, 3, 4].flatMap(x => x * 2) // [2, 3, 6, 8]

25、数组的at()方法

答:查找指定位置的成员值,可以出现负数,如果超出范围返回undefined。
arr[index]只能是正数,如果是负数,要写成 arr[arr.length - number]的形式
let arr = [0,1,2,3]
arr.at(2) // 2
arr.at(-1) // 3
arr.at(-5) // undefined

26、什么是排序稳定性

答:是排序算法的重要属性,指的是排序关键字相同的项目,排序前后的顺序不变

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-05-01 16:02:57  更:2022-05-01 16:03:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/17 0:53:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码