likes
comments
collection
share

伪数组 数组 你真的懂了吗?

作者站长头像
站长
· 阅读数 10

伪数组和数组的区别

伪数组

啥叫伪数组呢?伪数组,即 arrayLike,也称为类数组。是一种按照索引存储数据且具有 length 属性的对象。因为是对象,所以不能调用数组的方法,比如 forEach()push() 等。

我们先来看个例子。

let fakeArray = { '0': 1, '1': 2, '2': 3, length: 3 }

这个就是伪数组。

我们可以看到伪数组也可以和数组一样通过下标拿取其中的元素,并且拿到他们的长度。 伪数组 数组 你真的懂了吗?

然后我们再看一看,我们可以看到正常的数组可以进行push方法,存取数据,而伪数组不可以调用,同时伪数组的类型并不是 数组。 伪数组 数组 你真的懂了吗?

伪数组七十二变

那么当我们有一些数据得到的是伪数组,那么我们又该怎么对它进行操作呢?它又不可以调用数组的方法。 对呀,当我们把伪数组转化为数组,不就可以调用数组方法处理数据啦。那么我们又该怎么转化呢?

ES6里的**Array.from()**方法

let fakeArray = { '0': 1, '1': 2, '2': 3, length: 3 }
let a = Array.from(fakeArray)
console.log(a)

伪数组 数组 你真的懂了吗?

数组的concat()方法

let fakeArray = { '0': 1, '1': 2, '2': 3, length: 3 }
let b = [].concat.apply([],fakeArray)
console.log(b)

伪数组 数组 你真的懂了吗?

数组的slice()方法

这里用到apply,主要是为了使得伪数组能够使用slice这个方法。也可以用call,就是为了让this指定伪数组。 伪数组 数组 你真的懂了吗?

for遍历方法

let fakeArray = { '0': 1, '1': 2, '2': 3, length: 3 }
let d = [];
for (let i = 0; i < fakeArray.length; i++) {
  d.push(fakeArray[i]);
}

伪数组 数组 你真的懂了吗?