那么这两个函数有什么区别呢?Array.from vs Array.prototype.map
它们都创建了new Array
对象。目前我发现的唯一差别是Array.from
支持ArrayLike
参数。我没有看到任何理由,他们只是没有加ArrayLike
支持Array.prototype.map
函数。
我错过了什么吗?
那么这两个函数有什么区别呢?Array.from vs Array.prototype.map
它们都创建了new Array
对象。目前我发现的唯一差别是Array.from
支持ArrayLike
参数。我没有看到任何理由,他们只是没有加ArrayLike
支持Array.prototype.map
函数。
我错过了什么吗?
Array.from()
的目的是获取一个非数组(但是数组)的对象并将其复制到一个实际的数组中。然后这允许你在副本上使用所有的数组方法,包括除了迭代它之外的东西,比如.splice()
,.sort()
,.push()
,.pop()
等......这显然比使.map()
适用于类似数组的东西更有效。
制作Array.prototype
在JS(更重要的是,在DOM中,大多数类似'数组'的对象存在)中的每一个数组类似的“类”的原型对象将是一个潜在的错误。
关于HTML元素/属性列表的.reduce()
会是什么样子?
Array.from
是[].slice.call(arrayLike);
的正式版本,不需要创建一个未使用的数组,只需要创建一个数组。
所以真的,Array.from
可以与function (arrLike) { return [].slice.call(arrLike); }
多重填充,并减去本机执行速度/内存的改进,这是相同的结果。
这与地图| reduce | filter | some | every | find没有什么关系,这是生活长寿和快乐生活的关键,无需微操作循环来完成任务。
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')
不适合我。你会得到什么结果? – Bergi 2016-05-20 12:21:59