如何把一个类数组对象转换成数组

2016-10-24  本文已影响0人  老虎爱吃母鸡

ES5的方法

主要借用[].slice.call()实现

var foo = function() {
    var arr = [].slice.call(arguments)
    var result = Object.prototype.toString.call(arr)
    console.log(arr) //[]
}()

ES6的方法

  1. 使用Array.from, 值需要对象有length属性, 就可以转换成数组
const arrayLike = {
  length: 5
}
let arr2 = Array.from(arrayLike)
//[undefined, undefined, undefined, undefined, undefined]
  1. 使用展开运算符
    但是展开运算符只能将某些数据结构转换成数组, 因为本质是调用遍历器接口(Symbol.iterator
    ),如果一个对象没有部署这个接口,就无法转换 --- 阮一峰ES6
// arguments对象
function foo() {
  var args = [...arguments];
}
// NodeList对象
[...document.querySelectorAll('div')]

兼容写法

const toArray = (() => Array.from ? Array.from : obj => [].slice.call(obj))();

Demo

阮一峰ES6教程

let arrayLike = {
    '0': 'a',
    '1': 'b',
    '2': 'c',
    length: 3
};
// ES5的写法
var arr1 = [].slice.call(arrayLike); // ['a', 'b', 'c']
// ES6的写法
let arr2 = Array.from(arrayLike); // ['a', 'b', 'c']
上一篇 下一篇

猜你喜欢

热点阅读