2

私は長年PHPで作業していて、整数IDのオブジェクト用にJSでより複雑なデータ構造を作成することに頭を悩ませています。整数IDで階層的にキー設定されたこれらの単純なオブジェクトを格納するオブジェクトを作成する必要があります。したがって、次のオブジェクトがあり、それぞれが一意の整数IDを持っている場合:

セクション、要素、アイテム、エントリ

PHPで私は次のようなことをします

$arr[$section_id][$element_id][$item_id][$entry_id] = $entry;

javascriptでは、これは機能しません。これらのIDを技術的に引用符で囲んで強制することはできますが、それは悪い考えのようです。同様に、オブジェクトを作成して引用符で囲まれた整数のアプローチを使用することもできますが、これもハッキーのようです。

現在、データを通常の整数のインデックス付き配列に格納し、caolanの非同期検出を使用して特定のメンバーをIDで検索しています。これは機能しますが、同等のphpと比較すると非常に厄介なようです。JSでこれを行うためのよりクリーンな方法があることを願っています。

TIA!

4

2 に答える 2

0

これは少し醜いですが、それはあなたが望むものにかなり近づくでしょう。

次のように、JavaScript配列クラスにメソッドを追加できます。

Array.prototype.g = function(index) { 
    if (this[index] == undefined) { 
         this[index] = [];
    } 
    return this[index]; 
 }

次に、何かを設定するには、次のようにします。

var test = [];
test.g(5).g(7)[5] = 1;

残念ながら、最後のエントリでは、値を設定するために通常の表記法を使用することを忘れないでください。

期待どおりに取得します。

test[5][7][5]; //1

明らかに、私はgを薄い空気から引き出しただけで、独自の関数名を思い付くことができます。

免責事項:人々はプロトタイプチェーンを使用して組み込み型を拡張することに眉をひそめる傾向がありますが、私が知る限り、ほとんどの主要なフレームワークはもはやそうしません。大丈夫です。

于 2013-02-19T03:38:48.207 に答える
0

javascriptは文字列インデックスを持つ配列を保存できないので、私はこれらを使用します:

var namespace = function(name, separator, container){
  var ns = name.split(separator || '.')
    , o = container || window
    , i = 0;
  while (i++ < ns.length) o = o[ns[i - 1]] = o[ns[i - 1]] || {};
  return o;
}

namespace(arr + '.' + section_id + '.' + element_id + '.' + item_id + '.' + entry_id) = entry;
// ex : namespace('arr.1.3.2.6') will product arr.1.3.2.6 object
于 2013-02-19T03:20:58.323 に答える