解锁js数组新姿势
2017-07-21 本文已影响54人
7天苹果
如何不使用loop循环,创建一个长度为100的数组,并且每个元素的值等于它的下标?
Object.keys(Array.from({length:100}))
效果:
创建数组Object.keys()
参数是一个对象,返回一个数组,该数组的成员是对象自身的(而不是继承的)所有属性名。
Example:
var o = {
p1: 123,
p2: 456
};
Object.keys(o); /*["p1","p2"]*/
Array.from()
Array.from()可以将各种值转为真正的数组,并且还提供map功能。这实际上意味着,只要有一个原始的数据结构,你就可以先对它的值进行处理,然后转成规范的数组结构,进而就可以使用数量众多的数组方法。
Array.from({ length: 2 }, () => 'jack') // ['jack', 'jack']
上面代码中,Array.from的第一个参数指定了第二个参数运行的次数。这种特性可以让该方法的用法变得非常灵活。
所以如果我们只是写成
Array.from({length:100});
效果会是这样:
所以我们就可以知道Object.keys(Array.from({length:100}))
是如何实现返回一个创建一个长度为100的数组,并且每个元素的值等于它的下标的数组的:
- 使用Array.from()方法返回一个新的长度为100但元素为undefined的数组。
- 使用Object.keys()返回数组中各元素下标
改进版:
Array.from(Array(100).keys())
使用ES5:
Object.keys(Array.apply(null,{length:100}));