-2

何らかの理由でハードコーディングする必要がある JS の関数があります。このハードコードされた関数を記述する関数を作成するにはどうすればよいですか? これが私の例です。obj が複数配列/JSON オブジェクトであると仮定します。

function foo2(obj) {
    var t = obj["key1"];
    t = t["key2"];
    return t;
}

function fooN(obj) {
    var t = obj["key1"];
    t = t["key2"];
    ...//more goes here
    t = t["keyN"];
    return t;
}

マルチアレイ/オブジェクトにアクセスする簡単な方法があることは知っていますが、変数置換がないため、このようなハードコーディングされた関数が断然最速です。ありがとうございました。

4

2 に答える 2

0

いくつかの奇妙な要件のように思えますが、考えられる解決策は、関数をwindowusingに追加することwindow['foo' + number]です。

このソリューションの主なトリッキーな部分は、 の正しい値iが使用されることを保証する中間のクロージャーです。iこれは、引数として取り、関数を返す関数を呼び出すことによって行われます。

var N = 5;

fooX = function(obj, x) {
  var t = obj["key" + 1];
  for (var i = 2; i <= x; i++) {
    t = t["key" + i];
  }
  return t;
}

for (var i = 1; i <= N; i++) {
  window['foo' + i] = (function(x) {
    return function(obj) {
      return fooX(obj, x);
    }
  })(i);
}


var obj = {
  key1: {
    key2: {
      key3: {
        key4: {
          key5: 5
        }
      }
    }
  }
}

var message = "Results:<br>" +
  "foo1(obj) = " + foo1(obj) + "<br>" +
  "foo2(obj) = " + foo2(obj) + "<br>" +
  "foo3(obj) = " + foo3(obj) + "<br>" +
  "foo4(obj) = " + foo4(obj) + "<br>" +
  "foo5(obj) = " + foo5(obj);

document.body.innerHTML = message;

于 2015-05-01T04:18:15.300 に答える