如何";捆绑;将两个javascript函数合并为一个,而只有选择器和要调用的函数不同?
我在代码段中有以下函数调用者:如何";捆绑;将两个javascript函数合并为一个,而只有选择器和要调用的函数不同?,javascript,jquery,function,optimization,Javascript,Jquery,Function,Optimization,我在代码段中有以下函数调用者: // del if ( maxDelivery > 0 ) { if ( maxDelivery === 1 ){ delAdressFunc( dels ); } else { for ( i = 0; i < maxDelivery; i += 1 ){ delAdressFunc( dels[i] ); } } } // ajax if ( maxA
// del
if ( maxDelivery > 0 ) {
if ( maxDelivery === 1 ){
delAdressFunc( dels );
} else {
for ( i = 0; i < maxDelivery; i += 1 ){
delAdressFunc( dels[i] );
}
}
}
// ajax
if ( maxAjaxTables > 0 ){
if ( maxAjaxTables === 1 ){
getAjaxTable( ajx, 0 );
} else {
for ( j = 1; j <= maxAjaxTables; j += 1){
getAjaxTable( ajx[j-1], j )
}
}
}
我需要确保函数在每个元素上只被调用一次,因此我正在过滤jqmData(“绑定”)
并在deladresfunc()
中将其设置为true
因此,它可能是0、1(最有可能)或2+元素。同样适用于ajx
和maxAjaxTables
(=ajx.length)函数调用方(obj、max、func){
如果(最大值>0){
如果(最大值===1){
func(obj);
}否则{
对于(i=0;i
只需将变化的变量(例如,maxAjaxTables
,ajx
,getAjaxTable
)作为参数传递给函数即可。这个问题更适合IMO。这里有点复杂,因为争论的数量不同。但是您可以使用.apply
(或者让delAddressFunc
也接受索引)。另外,让第二个循环从0
运行并删除-1
会更干净。dels
变量是如何设置的?(为什么它有时是数组,有时不是?)对于ajx
。。。您可以删除if(maxtelivery>0){
测试,因为(没有它)如果maxDelivery
为0
则它将转到for
语句而不执行任何操作。因此dels
要么是某种类型的对象,要么是此类对象的数组?如果它始终是数组,则更易于使用。编辑。请参见上文(1分钟内)
dels = $('.selectDeliveryAdress').filter(function() { return $(this).jqmData("bound") !== true; });
maxDelivery = dels.length;
function caller(obj, max, func) {
if ( max > 0 ) {
if ( max === 1 ){
func( obj );
} else {
for ( i = 0; i < max; i += 1 ) {
func( obj[i] );
}
}
}
}
caller(dels, maxDelivery, delAdressFunc);
caller(ajx, maxAjaxTables, getAjaxTable);