HuangHongRui / Notebook

:pencil2: Yeah.. This's My NoteBook...:closed_book:
0 stars 0 forks source link

Es6_数组[为所有数组添加新方法] #31

Open HuangHongRui opened 7 years ago

HuangHongRui commented 7 years ago

Es6 延续了Es5 的一贯风格。 为数组添加了几个新的方法。

  1. find()
  2. findIndex() 1和2 可以协助开发者在数组中查找任意值:
  3. fill()
  4. copyWithin() 3和4的灵感来自于定型数组的使用过程, 定型数组为Es6中的新特性,一种只包含数字的数组
HuangHongRui commented 7 years ago

find() & findIndex()均接受两个参数

执行回调函数时,传入的参数分别为:

如果给定的值满足定义的标准,回调函数应返回true, 一旦回调函数返回true, find()方法 和 findIndex() 都会立即停止搜索数组剩余的部分。

HuangHongRui commented 7 years ago

二者的区别:

let num = [25,34,43,126,21,72];

console.log(num.find(n => n>55))   //   126
console.log(num.findIndex( n => n>55 ))  //  3

通过find()查找到数组内大于55的第一个数值, 而findIndex() 定位到数组内大于55的第一个数值的位置

如要在数组中根据某个条件查找匹配的元素,那么选择find()findIndex()方法可以完成任务; 如只是查找某个值匹配的元素,那indexOf()lastIndexOf() 方法是更好的选择

HuangHongRui commented 7 years ago

fill()方法 可以用指定的值填充一至多个数组元素。 当传入一个值时,fill() 方法会用这个值重写数组中的所有值

let nums = [2,5,7,8]
nums.fill(0)
console.log(nums.toString()) // 0,0,0,0

调用 nums.fill(0)后,数组中的值均变为 0 如只想改变数组某一部分的值, 传入开始索引 & 不包含结束索引(不包含结束索引当前值)这两个参数即可:

let nums = [2,5,7,8]
nums.fill(1,2)
console.log(nums.toString())  // 2,5,1,1
nums.fill(0,1,3)
console.log(nums.toString())  // 2,0,0,1

如果开始索引或结束索引 为负值, 那这些值会与数组的length属性相加来作为最终位置 如: 开始位置为 -1, 那索引的值实为 array.length - 1.

HuangHongRui commented 7 years ago

copyWithin()方法 与 fill()方法相似。 也可以同时改变数组中的多个元素。

fill()方法是将数组元素赋值为一个指定的值, 而 copyWithin()方法则是从数组中赋值元素的值

调用copyWithin()方法时需要传入两参数:

  1. 一个为该方法开始填充值的索引位置
  2. 一个为开始复制值的索引位置

如 复制数组前两个元素值到后两个元素Code:

let nums = [1,2,3,4,5]
// 从位置2开始粘贴
// 从位置0开始复制
nums.copyWithin(2,0)
console.log(nums.toString())  //  1,2,1,2,3

默认情况, copyWithin() 会一直复制到数组末尾的值, 但也可以提供可选的第三个参数来限制被重写元素的数量 第三个参数是不包含结束索引, 用于指定停止复制值的位置

let nums = [1,2,3,4,5,7,0,6,5,8]
nums.copyWithin(2,0,1)
console.log(nums.toString())  //  1,2,  1,  4,5,7,0,6,5,8

由于可选的结束索引被设置为1, 因此只有位于索引0的值被复制了, 数组中的其他元素保持不变。

copyWithin() 方法的所有参数都接受负值 [ 这点与fill()方法一致 ]