如何将一个对象的数组作为函数的名称和值作为函数返回值。一个例子是:
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;
}, {});
如何解决此问题以达到预期效果?没有使用reduce会有更好的效果吗?
答案 0 :(得分: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++){
var name = funcs[i].name;
var ret = funcs[i]();
dict[name] = ret;
}
return dict;
})(funcs);
console.log(dict);
答案 1 :(得分:1)
而不是减少,你可以做这样的事情
var dict = {}
funcs.forEach(function (func) {
dict[func.name] = func();
});
答案 2 :(得分:0)
我只是愚蠢而忘记在函数结束时返回一个值。所以我提出的从一开始就减少的解决方案实际上是正确的。
var dict = funcs.reduce(function (acc, func) {
acc[func.name] = func();
return acc;
}, {});
答案 3 :(得分:0)
您可以使用Object.assign
和Array#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; }