我有以下模板的许多功能:
function (field, filter){
var q = {};
q[field] = doSomething(filter);
return q;
}
我是Javascript的新手,但已经知道它是一种非常富有表现力的语言。所以,我的问题是这样一个函数的主体可以写得更简洁吗?
(我无法传递q
作为参数并消除var q = {}
,因为这些函数的输出不应合并为单个对象哈希。)
我完全清楚知道这个问题的答案可能会使我的代码既不快也不清晰。我只是想学习,这就是全部 - 所以没有火焰,拜托。
答案 0 :(得分:2)
不,你不能简化它。
你正试图做这样的事情:
({})[field] = value;
但是你想要返回(现在修改过的){}
。为了做到这一点,你必须保持对它的引用。这就是你var q = {}
的作用。
答案 1 :(得分:0)
您可以使用
之类的内容始终避免重复代码function objectWith(field, value) {
var q = {}; q[field] = value; return q;
}
这将使您的原始代码成为
function f(field, filter) {
return objectWith(field, doSomething(filter);
}
甚至更好,完全避免'f'并使用
var o = objectWith(field, doSomething(filter);
无论何时使用它,假设field始终是变量。如果它是字面意思,那么编写
会更加清晰var o = { fieldLiteral: doSomething(filter) };
答案 2 :(得分:0)
只是我的狡猾的小说,但你正在做的是等同于下面的代码:
function f(field, filter){
var q = {};
q.__defineGetter__(field, doSomething(filter));
return q;
}
可能有某种方法可以缩短它的形式。