2017-02-22 6 views
4

コマンドキューには次のようなものがあります。 。javascript関数の引数を呼び出すことなく引数を問い合わせる方法

var commandQueue = [ 
     function() {thing(100, 0, shiftFunc)}, 
     function() {thing(100, 233, shiftFunc)}, 
     function() {thing(100, 422, shiftFunc)} 
]; 

どのように私は、パラメータとしてcommandQueueを取り、キュー内の関数を呼び出すことなく、キュー内の関数に2つ目の引数(インデックス[1])の合計を返す関数を書くことができますか?

答えて

1

残念ながらこれは不可能です。 JavaScriptは、関数定義の中で覗くことはできません。

1

あなたはそれを少し書き換えた後、mapを使用することができます。

function thing(a, b) { 
 
    return Math.pow(a * b, 2); 
 
} 
 
var commandQueue = [ 
 
    function() { 
 
    return thing(100, 0); 
 
    }, 
 
    function() { 
 
    return thing(100, 233) % 6; 
 
    }, 
 
    function() { 
 
    return thing(100, 422) % 6; 
 
    } 
 
]; 
 
var commandResults = commandQueue.map(function(a) { 
 
    return a(); 
 
}); 
 
console.log(commandResults);

6

あなたは第一および第二のコンマの間の値を検索した、Function#toStringや正規表現を使用することができます。

var commandQueue = [ 
 
     function() {thing(100, 0, shiftFunc)}, 
 
     function() {thing(100, 233, shiftFunc)}, 
 
     function() {thing(100, 422, shiftFunc)} 
 
]; 
 

 
console.log(commandQueue.reduce(function (r, a) { 
 
    return r + +((a.toString().match(/,\s*(\d+),/) || [])[1] || 0); 
 
}, 0));

0

あなたはこのようにそれを行うことができます。

const sum = commandQueue.reduce((acc, val) => 
 
    Number(val.toString().split(',')[1]) + acc, 0); 
 
console.log(sum);

1

var commandQueue = [ 
 
    function() {thing(100, 0, shiftFunc)}, 
 
    function() {thing(100, 233, shiftFunc)}, 
 
    function() {thing(100, 422, shiftFunc)} 
 
]; 
 

 

 
function getThingSecondArg(fn) { 
 
    return +/thing\([^,]*,([^,]*)/.exec(fn)[1].trim(); 
 
}; 
 

 
function sum(arr) { 
 
    for (var i=0, result=0; i<arr.length; i++) { 
 
     result += arr[i]; 
 
    } 
 
    return result; 
 
} 
 

 
console.log(sum(commandQueue.map(getThingSecondArg)));

関連する問題