伪数组转数组

最新更新: 2020-01-03 12:06:55 阅读: 134次

1、什么是伪数组

  具备数组的一些特性,比如具备长度、能遍历,但不能直接调用数组的方法,有两个特征,一按照索引方存储数据,二有length属性。

  如果伪数组需要调用数组的方法,就需要转换为数组了 。伪数组转为数组有以下方法:

2、es5伪数组转数组


function kk() {
    //const arr=[].slice.call(arguments);
    const arr=Array.prototype.slice.call(arguments);
    console.log(arr);
}
kk(56,87,'tyt');


//结果

Array(3) [ 56, 87, "tyt" ]



3、es6做法

3.1 Array.from


var args=Array.from({ 0: 'a', 1: 'b', length: 2 })
console.log(args);
//结果:


Array [ "a", "b" ]


Array.from(arrayLike,mapFn,thisAr)

如果参数是一个真正的数组,Array.from会返回一个一模一样的新数组。

值得提醒的是,扩展运算符(...)也可以将某些数据结构转为数组。

扩展运算符背后调用的是遍历器接口(Symbol.iterator),如果一个对象没有部署这个接口,就无法转换。Array.from方法还支持类似数组的对象。所谓类似数组的对象,本质特征只有一点,即必须有length属性。因此,任何有length属性的对象,都可以通过Array.from方法转为数组,而此时扩展运算符就无法转换。


Array.from 第二个参数,作用类似于数组的map方法,用来对每个元素进行处理,将处理后的值放入返回的数组。

Array.from(arrayLike, x => x * x);
// 等同于
Array.from(arrayLike).map(x => x * x);
Array.from([1, 2, 3], (x) => x * x)
// [1, 4, 9]
如果map函数里面用到了this关键字,还可以传入Array.from的第三个参数,用来绑定this



3.2 Array.of

Array.of方法用于将一组值,转换为数组。


Array.of(3, 11, 8) // [3,11,8]
Array.of(3).length // 1

Array方法没有参数、一个参数、三个参数时,返回结果都不一样。只有当参数个数不少于 2 个时,Array()才会返回由参数组成的新数组。参数个数只有一个时,实际上是指定数组的长度。

Array.of基本上可以用来替代Array()或new Array(),并且不存在由于参数不同而导致的重载。它的行为非常统一。



3.3 Array.fill

fill方法使用给定值,填充一个数组。


['a', 'b', 'c'].fill(7)
// [7, 7, 7]

new Array(3).fill(7)
// [7, 7, 7]
['a', 'b', 'c'].fill(7, 1, 2)
// ['a', 7, 'c']


fill方法还可以接受第二个和第三个参数,用于指定填充的起始位置和结束位置。