类数组转换成数组的几种方式

本博客 hjy-xh,转载请申明出处

概括

  • Array.prototype.slice.call()
  • Array.from()
  • 拓展运算符

Array.prototype.slice.call()

这种方法是借用了数组原型中的slice方法,返回一个数组

slice()返回一个新的数组对象,这一对象是一个由beginend决定的原数组的浅拷贝(包括 begin,不包括end),且原始数组不会被改变,语法如下:

1
arr.slice([begin[, end]])

这里看看slice()方法的内部实现:

1
2
3
4
5
6
7
8
9
Array.prototype.slice = function (start, end) {
const result = new Array();
start = start || 0;
end = end || this.length;
for (let i = start; i < end; i++) {
result.push(this[i]);
}
return result;
}

Array.from()

Array.from()方法对一个类似数组或可迭代对象创建一个新的,浅拷贝的数组实例

1
Array.from(arrayLike[, mapFn[, thisArg]])
  • arrayLike
    想要转换成数组的伪数组对象或可迭代对象
  • mapFn 可选
    如果指定了该参数,新数组中的每个元素会执行该回调函数。
  • thisArg 可选
    可选参数,执行回调函数 mapFn 时 this 对象。

拓展运算符

ES6中的扩展运算符…也能将某些数据结构转换成数组,这种数据结构必须有遍历器接口

1
var args = [...arguments];

参考

MDN