首先,我们先预习一下对象数组和数组对象的概念:
对象数组:指的是一个数组,其中的每个元素都是一个对象。这些对象可以包含多个属性,形成一个包含多个对象的数组结构。比如下面这个:
// 创建一个对象数组存储学生信息
let students = [{ name: 'Alice', age: 18, score: 90 },{ name: 'Bob', age: 20, score: 85 },{ name: 'Charlie', age: 19, score: 88 }
];
数组对象:则是指的一个对象,它具有类似数组的特性,比如有一个 length 属性表示数组的长度,可以通过索引访问其中的元素。数组对象通常是通过类数组对象或类似数组的对象转换而来,但它并不是真正的数组。比如下面这个:
let obj = {0: 'a', 1: 'b', 2: 'c', length: 3};
总的来说,对象数组更多地强调数组中的元素是对象,而数组对象更多地强调对象具有类似数组的特性。实际上,它们都是用来存储一组有序数据的数据结构,只是在不同的语境下有不同的称呼。
到这里,我们已经搞清楚类数组对象的概念,那它可以转换成数组吗?如何转换呢?下面是类数组对象转换成数组的5种方法。
- 使用 Array.from() 方法:
let arrayLike = {0: 'a', 1: 'b', 2: 'c', length: 3}; let array = Array.from(arrayLike); console.log(array); // ['a', 'b', 'c']
- 使用扩展运算符(...):
let arrayLike = {0: 'a', 1: 'b', 2: 'c', length: 3}; let array = [...arrayLike]; console.log(array); // ['a', 'b', 'c']
- 使用 Array.prototype.slice.call() 方法:
let arrayLike = {0: 'a', 1: 'b', 2: 'c', length: 3}; let array = Array.prototype.slice.call(arrayLike); console.log(array); // ['a', 'b', 'c']
- 使用 Array.prototype.slice.apply() 方法:
let arrayLike = {0: 'a', 1: 'b', 2: 'c', length: 3}; let array = Array.prototype.slice.apply(arrayLike); console.log(array); // ['a', 'b', 'c']
- 使用 Array.prototype.concat.apply() 方法:
let arrayLike = {0: 'a', 1: 'b', 2: 'c', length: 3}; let array = Array.prototype.concat.apply([], arrayLike); console.log(array); // ['a', 'b', 'c']