1

次のテンプレートの関数がたくさんあります。

function (field, filter){
  var q = {};
  q[field] = doSomething(filter);
  return q;
}

私はJavascriptを初めて使用しますが、Javascriptは非常に表現力豊かな言語であるという考えをすでに持っています。それで、私の質問は、そのような関数の本体をより簡潔に書くことができるかということです。

(これらの関数の出力は単一のオブジェクトハッシュにマージされるべきではないため、qパラメーターとして渡して削除することはできません)。var q = {}

この質問への答えを知っていると、私のコードが速くも明確にもならない可能性があることを私は完全に承知しています。学びたいだけです。それだけです。炎を出さないでください。

4

3 に答える 3

2

いいえ、これ以上単純化することはできません。

あなたはこのようなことをしようとしています:

({})[field] = value;

しかし、次に(現在変更されている)を返します{}。それを行うには、それへの参照を保持する必要があります。それはあなたvar q = {}がしていることです。

于 2012-09-20T17:33:48.193 に答える
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);

フィールドが常に変数であると仮定すると、最初にそれを使用するときはいつでも。それがリテラルであれば、書くとさらに明確になります

var o = { fieldLiteral: doSomething(filter) };
于 2012-09-20T17:42:03.847 に答える
0

私のよこしまな一口ですが、あなたがしていることは次のコードと同等です:

function f(field, filter){
    var q = {};
    q.__defineGetter__(field, doSomething(filter));
    return q;
}

その形で短くする方法があるかもしれません。

于 2012-09-20T17:48:13.310 に答える