JQuery map vs Javascript map vs For-loop

dav*_*ave 19 javascript jquery

我正在实现一些自然适合地图的代码.但是,我在列表中有大量的对象,我将要迭代,所以我的问题是哪个是最好的方法:

var stuff = $.map(listOfMyObjects, someFunction())

var stuff = listOfMyObjects.map(someFunction())
Run Code Online (Sandbox Code Playgroud)

要不就

var stuff = new Array(); 
for(var i = 0; i < listOfmyObjects.length; i++){
    stuff.push(someFunction(listOfMyObjects[i]));
}
Run Code Online (Sandbox Code Playgroud)

tsk*_*zzy 11

后者(for循环)要快得多.我记得在某个地方看到了一个基准,但我似乎无法找到这个链接.

如果性能确实是一个问题,那么我会使用for循环.它并没有真正模糊代码.

  • for循环可能与相同的性能接近,除非他将someFunction内联到循环中.map本质上只是通过一个额外的函数调用来做同样的事情,但性能命中来自每次调用函数,它填充每个函数的范围. (8认同)

Soc*_*ram 11

这是在jsben.ch中完成的测试用例:http://jsben.ch/#/BQhED

它表明for循环映射比jquery映射更快(至少在chrome中).


jAn*_*ndy 7

首先,真的Objects没有本地.map()方法,也没有.length属性.所以我们要么谈论Arrays或者Array-like-objects(例如jQuery对象).

但是,没有速度比使用本地迭代方式for,whiledo-while循环.所有其他功能操作都会为每次迭代执行一个函数(猜测是什么).

当一个对象传递给它时,jQuerys .each()将只执行一个for-in循环.这是循环对象的最快方法.您可以for-in自己使用并节省开销呼叫.

在可读性方面另一个"好"的方法是使用像.keys()和的ES5功能.map().例如:

var myObj = {
    foo:  'bar',
    base:  'ball',
    answer: 42,
    illuminati: 23
};

Object.keys( myObj ).map(function( prop ) {
    console.log( myObj[ prop ] );
});
Run Code Online (Sandbox Code Playgroud)

我认为这在可读性,便利性和性能方面是一个非常好的交易.当然你应该为旧的浏览器使用ES5抽象库.

但同样,在性能方面无法击败原生循环.