2017-08-27 64 views
0

如何將函數數組作爲函數名稱和值作爲函數的函數的返回值。一個例子是:如何將函數數組作爲函數的名稱和值作爲函數的返回值的函數的名稱對象

var a=x=>"M",b=_=>"e",c=_=>"r",d=_=>"y",e=_=>"C", 
    f=_=>"h",g=_=>"i",h=_=>"s",i=_=>"t",j=_=>"m", 
    k=_=>"a",l=_=>" ",m=_=>"!", 
    funcs = [a,b,c,d,e,f,g,h,i,j,k,l,m] 

// do some magic with funcs to receive myDict  
var myDict = {'a':'M', 'b':'e', 'c':'r', 'd':'y', ...} 

我試過這樣的東西,但它沒有奏效。

var dict = funcs.reduce(function (acc, func) { 
    acc[func.name] = func(); 
    return acc; 
}, {}); 

我該如何解決這個問題以達到想要的效果?有沒有更好的使用減少?

+0

'ACC [func.name] = FUNC();'** **調用功能;你只需要'acc [func.name] = func;'。 – Pointy

回答

2

循環的功能funcs陣列上,使用funcs[i].name得到函數的名稱,返回的值該功能由funcs[i]()執行。

將名稱存儲爲鍵並將返回值作爲該鍵在對象中的值。

var a=x=>"M",b=_=>"e",c=_=>"r",d=_=>"y",e=_=>"C", 
 
    f=_=>"h",g=_=>"i",h=_=>"s",i=_=>"t",j=_=>"m", 
 
    k=_=>"a",l=_=>" ",m=_=>"!"; 
 

 
var funcs = [a,b,c,d,e,f,g,h,i,j,k,l,m]; 
 

 
var dict = (function (funcs) { 
 
    var dict = {}; 
 
    for(var i=0; i<funcs.length; i++){ 
 
    \t var name = funcs[i].name; 
 
    \t var ret = funcs[i](); 
 
     dict[name] = ret; 
 
    } 
 
    return dict; 
 
})(funcs); 
 

 
console.log(dict);

0

我只是愚蠢,卻忘了在函數的最後返回一個值。所以我提出的從一開始就減少的解決方案實際上是正確的。

var dict = funcs.reduce(function (acc, func) { 
    acc[func.name] = func(); 
    return acc; 
}, {}); 
0

你可以使用的Object.assignArray#map的組合。

var a = x => "M", b = _ => "e", c = _ => "r", d = _ => "y", e = _ => "C", f = _ => "h", g = _ => "i", h = _ => "s", i = _ => "t", j = _ => "m", k = _ => "a", l = _ => " ", m = _ => "!", 
 
    funcs = [a, b, c, d, e, f, g, h, i, j, k, l, m], 
 
    myDict = Object.assign(...funcs.map(f => ({ [f.name]: f() }))); 
 

 
console.log(myDict);
.as-console-wrapper { max-height: 100% !important; top: 0; }