【ES6】数组的扩展(二)之Array.from()和Array.of()

Array.from()

Array.from方法用于将两类对象转为真正的数组:类似数组的对象和可遍历(iterator)的对象(包括Map和Set)

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']

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

Array.from({length:3})   // [undefined,undefined,undefined]

对于还没有部署该方法的浏览器,可以用Array.prototype.slice方法替代。

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

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

Array.from([1,2,3],x => x*x)   // [1, 4, 9]
Array.from([1,2,3].map(x => x*x))   // [1, 4, 9]

下面的例子将数组中布尔值为false的成员转为0。

Array.from([1,,2,,3],(n) => n || 0)
// [1, 0, 2, 0, 3]

Array.from可以将各种值转为真正的数组,并且还提供map功能。

Array.from({length:2},() => 'jack')
// ["jack", "jack"]


Array.of()

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

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

这个方法的主要目的,是弥补数组构造函数Array()的不足。

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

Array.of总是返回参数值组成的数组。如果没有参数,就返回一个空数组。

Array.of方法可以用下面的代码模拟实现。

function ArrayOf(){
    return [].slice.call(arguments)
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值