簡體   English   中英

在Javascript中,如何同時在兩個seq的元素上執行函數?

[英]In Javascript, how to execute a function on elements of two seqs concurently?

在Javascript中,在兩個數組上並發迭代並在兩個正在運行的元素上調用函數的最佳方法是什么? 例如:

var a = [1, 2, 3];
var b = [11, 12, 13];
function my_func() { /* some custom function */}

該代碼應執行my_func 3次,如下所示:

my_func(1,11);
my_func(2,12);
my_func(3,13);

如何在不定義新功能的情況下使用jQuery / underscore api實現此目標?

例如,這種方式(使用underscore.js)?

_.each( _.zip(a,b), my_func );

function my_func( pair ){
  alert( pair[0] + pair[1] );
}

要么:

_.each( _.zip(a,b), function( pair ){
  my_func( pair[0], pair[1] );
  // or: my_func.apply( null, pair );
});

function my_func( a, b ){
  alert( a + b );
}

--

function wrapply( func, thisObj ){
  return function( args ){
    return func.apply( thisObj, args );
  }
}

var add = wrapply( function(a,b){ return a+b; });
alert( add([1,2]) );

好吧,簡單的JavaScript很好地做到了這一點。 假設您的a數組和b數組具有相同的長度,只需使用標准的for循環。

for (var i = 0; i < a.length; i++) {
    my_func(a[i], b[i]);
}

jQuery還提供了.each()方法,可以使對一個序列的操作非常容易。 兩個進行操作僅需要更多代碼。

$.each(a, function(i, aItem) { my_func(aItem, b[i]); });

而且,如果您想使用zip操作,則可以使用jQueryArrayUtils插件

$.zip(a, b).each(function() {
    var aItem = this[0];
    var bItem = this[1];
    my_func(aItem, bItem);
});

作為Python的粉絲,后一種方法對我來說似乎特別好。 但老實說,如果您不打算做比調用my_func更復雜的my_func ,那么您也可以只使用普通的for循環。

[1,2,3].forEach(function(e, i, arr){my_func(e, arr[i]);}, [11,12,13]);

jQuery版本:

$.each(a, function(index, value) { 
    my_func(value, b[index]);
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM