2014-09-26 41 views
4

那么这两个函数有什么区别呢?Array.from vs Array.prototype.map

它们都创建了new Array对象。目前我发现的唯一差别是Array.from支持ArrayLike参数。我没有看到任何理由,他们只是没有加ArrayLike支持Array.prototype.map函数。

我错过了什么吗?

回答

7

Array.from()的目的是获取一个非数组(但是数组)的对象并将其复制到一个实际的数组中。然后这允许你在副本上使用所有的数组方法,包括除了迭代它之外的东西,比如.splice(),.sort(),.push(),.pop()等......这显然比使.map()适用于类似数组的东西更有效。

1

制作Array.prototype在JS(更重要的是,在DOM中,大多数类似'数组'的对象存在)中的每一个数组类似的“类”的原型对象将是一个潜在的错误。

关于HTML元素/属性列表的.reduce()会是什么样子?

Array.from[].slice.call(arrayLike);的正式版本,不需要创建一个未使用的数组,只需要创建一个数组。

所以真的,Array.from可以与function (arrLike) { return [].slice.call(arrLike); }多重填充,并减去本机执行速度/内存的改进,这是相同的结果。

这与地图| reduce | filter | some | every | find没有什么关系,这是生活长寿和快乐生活的关键,无需微操作循环来完成任务。

0

Array.map似乎有点更好的性能,以及:

var a =() => [{"count": 3},{"count": 4},{"count": 5}].map(item => item.count); 
var b =() => Array.from([{"count": 3},{"count": 4},{"count": 5}], x => x.count); 

var iterations = 1000000; 
console.time('Function #1'); 
for(var i = 0; i < iterations; i++){ 
    b(); 
}; 
console.timeEnd('Function #1') 

console.time('Function #2'); 
for(var i = 0; i < iterations; i++){ 
    a(); 
}; 
console.timeEnd('Function #2') 
+0

不适合我。你会得到什么结果? – Bergi 2016-05-20 12:21:59