在javascript中对函数数组进行排序

时间:2017-01-13 01:23:05

标签: javascript arrays sorting

我想创建一个对函数进行排序并调用它的函数。问题是每个函数可能有不同数量的参数,并且必须在排序之前传递这些参数。例如:

numCheckedArray.remove(Integer.valueOf(which));

问题是如果我像这样传递数组,我已经传递了函数的值,但是我不想在排序之前执行这些函数,因为它们很重计算,所以只需要执行一次,这就是我排序的原因。

没有办法像这样通过:

function sortFunciton(arrayOfFunctions) {

}

mySortedFunction = sortFunction([function1('a', 'b'), function2('a'), function3('a','b','c')])

然后再做

mySortedFunction = sortFunction([function1.args('a', 'b', 'c')], function2.args('a'), function3.args('a', 'b', 'c')])

3 个答案:

答案 0 :(得分:1)

您可以使用Function.prototype.bind

传递带有某些绑定参数的uninvoked函数引用
function selectFunc(funcArray) {
  //some selection criteria
  return funcArray[0];
}

mySelectedFunc = selectFunc([function1.bind(null, 'a', 'b'), function2.bind(null, 'a'), function3.bind(null, 'a','b','c')]);

mySelectedFunc() //equivalent of running function1('a', 'b')

答案 1 :(得分:0)

您可以使用.bind然后只需调用不带参数的函数(将使用已绑定的参数调用它)

function add(a, b) { return a + b; }
function mult(a, b) { return a * b; }
var functions = [add.bind(this, 1, 1), mult.bind(this, 5, 5)];

functions.forEach(f => console.log(f()));

答案 2 :(得分:0)

function sortFunciton(arrayOfFunctions) {

}

var mySortedFunction = sortFunction([
    { func: function1, arguments: ['a', 'b']}, 
    { func: function2, arguments: ['a']}, 
    { func: function3, arguments: ['a', 'b', 'c']}
]);

for (var i = 0; i < mySortedFunction.length; i++)
{
    mySortedFunction[i].func.apply(this, mySortedFunction[i].arguments);
};