当前位置: 首页 > 编程笔记 >

ES6 新增的创建数组的方法(小结)

司徒瀚
2023-03-14
本文向大家介绍ES6 新增的创建数组的方法(小结),包括了ES6 新增的创建数组的方法(小结)的使用技巧和注意事项,需要的朋友参考一下

在ES6之前,创建数组的方式有2种:

一: 通过数组字面量

let array = [1,2,3];
console.log(array);//[1,2,3]

二: 通过new Array()创建数组

let array = new Array(1, 2, 3);
console.log(array); //[1,2,3]

在大多数情况下new Array()运行良好:

let array = new Array(1, 2);
console.log(array.length); //2
console.log(array[0]); //1
console.log(array[1]); //2

array = new Array('a');
console.log(array.length); //1
console.log(array[0]);//'a'

array = new Array(1, 'a');
console.log(array.length); // 2
console.log(array[0]);//1
console.log(array[1]);//'a'

但是new Array()有一种诡异的情况:

let array = new Array(2);
console.log(array[0]); // undefined
console.log(array[1]);// undefined
console.log(array.length); // 2 

当我们给new Array()传递单个数字参数时,这个数字不是作为数组元素,而是该数组的length属性而存在,而数组本身则是一个空数组。

为了解决上面这个令人类没有安全感的特性,ES6引入了Array.of()来解决这个问题:

三:Array.of()

顾名思义,of()方法就是以它接受到的参数作为元素来创造数组,上面我们说的单个数字参数的情况也同样适用:

let array = Array.of(3);
console.log(array.length); // 1
console.log(array[0]); // 3

array = Array.of(1, 2);
console.log(array.length);// 2
console.log(array[0]); // 1
console.log(array[1]);// 2

array = Array.of('a');
console.log(array.length);// 1
console.log(array[0]);// 'a'

array = Array.of(1, 'a');
console.log(array.length); // 2
console.log(array[0]);// 1
console.log(array[1]);// 'a'

四:Array.from()

ES6还增加了一个Array.from(),也是用了创建一个数组。它主要用在以类数组对象和可迭代对象为蓝本,创建对应的数组。

1: Array.from(类数组对象)

我们最熟悉的类数组对象,应该就是function的arguments对象了。接下来,我们看一个用Array.from()创建包含arguments元素的数组:

function createArrayFrom() {
  console.log(arguments instanceof Array); // false
  return Array.from(arguments);
}

let array = createArrayFrom(1, 2, 3);
console.log(array instanceof Array); // true
console.log(array.length); //3
console.log(array[0]);//1
console.log(array[1]);//2
console.log(array[2]);//3
console.log(array.indexOf(2)); //1

2: Array.from(可迭代对象)

Array.from()也可以把一个可迭代对象转换为数组:

let iteratorObject = {
  *[Symbol.iterator](){
    yield 1;
    yield 2;
    yield 3;
  }
};
let array = Array.from(iteratorObject);
console.log(array instanceof Array); // true
console.log(array.length); // 3
console.log(array[0]); // 1

五:Array.from()的第二个参数

前面的例子,我们看到了一个类数组对象和可迭代对象作为Array.from()的第一个参数,从而创建出包含它们元素的数组。Array.from()的第二个参数是一个函数,这个函数用来将类数组对象和可迭代对象的元素进行某种变换后,再作为生出数组的元素,例如:

let iteratorObject = {
  *[Symbol.iterator](){
    yield 1;
    yield 2;
    yield 3;
  }
};
let array = Array.from(iteratorObject, (item)=>{return item + 1});
console.log(array[0]); //2
console.log(array[1]); //3
console.log(array[2]); //4

这个例子里,我们提供了把每个元素值加一的变换,所以原本的1,2,3,置换到新的数组之后,元素是2,3,4。

六: Array.from()的第三个参数

Array.from()还提供第三个参数可用,第三个参数用来指定this的值,如果在整个方法的调用中有用到this 的话,看一个例子:

let firstHelper = {
  diff: 1,
  add(value){
    return value + this.diff;
  }
};
let secondHelper = {
  diff: 2
};
function createArrayFrom() {
  return Array.from(arguments, firstHelper.add, secondHelper);
}

let array = createArrayFrom(1, 2, 3);
console.log(array); //[3, 4, 5]

上面的例子里面,我们的在add()方法里面使用了this(这行代码:value + this.diff),并且add()定义在firstHelper对象,且firstHelper对象也有diff属性,但是我们的第三个参数传入的是secondHelper,所以在firstHelper.add()方法里的this值是secondHelper。

以上就是ES6新增的Array.of()和Array.from()方法,可以使得开发者用更少的代码应对更多变的创建数组的场景。

 类似资料:
  • 本文向大家介绍ES6新增的数组知识实例小结,包括了ES6新增的数组知识实例小结的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了ES6新增的数组知识。分享给大家供大家参考,具体如下: 1.JSON数组格式转换 JSON的数组格式就是为了前端快速的把JSON转换成数组的一种格式,json数组格式如下: 这就是一个标准的JSON数组格式,跟普通的JSON对比是在最后多了一个length属性。只要

  • 主要内容:1.Array.from()方法,2.Array.of()方法,3.Array.prototype.copyWithin()方法,4.Array.prototype.find()方法,5.Array.prototype.findIndex()方法,6.Array.prototype.entries()方法,7.Array.prototype.keys()方法,8.Array.prototype.values()方法,9.Array.prototype.fill()方法ES6中引入了一些

  • 本文向大家介绍使用Java Reflection方法创建数组的新实例,包括了使用Java Reflection方法创建数组的新实例的使用技巧和注意事项,需要的朋友参考一下 可以使用java.lang.reflect.Array.newInstance()方法创建Array的新实例。此方法基本上会创建一个具有所需组件类型和长度的新数组。 给出了一个演示使用Array.newInstance()方法创

  • 问题内容: 我正在为学校进度设计基于文本的冒险游戏。我将每个“级别”设置为一个类,并将每个可探索区域(节点)设置为相应类中的一个方法。 困扰我的是从一个节点移动到另一个节点的代码。由于每个节点最多连接四个其他节点,因此我必须在每种方法中重复一个极为相似的代码块。 我更愿意做的是在每个节点的开头包含一个方法数组,如下所示: 然后将该数组发送到通用方法,然后将播放器发送到正确的节点: 我简化了代码,但

  • 在数组的属性和方法这一小节中我们学习到了如何查看数组的大小、维数(秩)、元素的数据类型、每个元素的大小等等。这一小节将详述如何从数值范围创建特殊数组,比如指定间隔的等差数列型数组、等比数列型数组等。 1. 创建等间隔序列数组 通常定义一个等间隔序列数组(即等差数组),需要指定某些具体要素,例如起始值、终止值、步长、样本数量等。主要功能类似于 Python 内置的 range 函数,但是返回的是一个

  • 本文向大家介绍ES6中Math对象新增的方法实例详解,包括了ES6中Math对象新增的方法实例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了ES6中Math对象新增的方法。分享给大家供大家参考,具体如下: Math.trunc() Math.trunc方法用于去除一个数的小数部分,返回整数部分。 对于没有部署这个方法的环境,可以用下面的代码模拟。 Math.sign() Math.s