[英]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.