オブジェクトの配列を表すJSONを返すWebサービスを呼び出すWebアプリケーションがあります。各オブジェクトにはいくつかのフィールドがあります。アイデアを与えるためのJSONの例を次に示します。
{
"data": [
{
"id": "12345",
"from": {
"name": "John Doe",
"id": "6789"
},
"start_time": "2012-12-16T02:17:20+0000",
"end_time": "2012-12-16T02:17:20+0000",
"publish_time": "2012-12-16T02:17:20+0000"
}
},
{
"id": "8888",
"from": {
"name": "Jane Smith",
"id": "011"
},
"start_time": "2012-12-16T02:17:20+0000",
"end_time": "2012-12-17T02:17:20+0000",
"publish_time": "2012-12-16T02:17:20+0000"
}
}
]
}
これが戻ってきたら、jQueryのparseJSON()メソッドを使用して、これをオブジェクトの配列に拡張します(「データ」値を保持します)。それはすべて問題ありませんが、配列を取得した後、各配列スロットで動作できるいくつかの関数があります。たとえば、end_timeとstart_timeの間の時間経過を出力するGetDuration()という関数があるとします。いずれにせよ、私はいくつかの関数(おそらく15)を定義し、この時点で、配列全体を反復処理し、関数のコピーですべてのオブジェクトを膨らませます。例
for (var i=0;i<data.length;i++)
data[i].TimeLapse = function() { ... };
これはもっと効率的にできると思います。今のところ、配列項目ごとに同じ関数の個別のコピーがあると思いますが、これは必須ではありません。また、処理時間の遅れにも気づきましたが、これを短縮できると期待しています。この状況で役立つと思われるjavascriptクロージャについて読んだことがありますが、クロージャで関数を記述した経験はあまりありません。クロージャーを設定してから、JSONを変更して、クロージャー型のオブジェクトに何らかの形で膨らませることはできますか?または、今日行っているように通常のjavascriptオブジェクトに膨らませて、作成したクロージャを指すようにオブジェクトタイプを変更しますか?
任意の考えや提案をいただければ幸いです。
ありがとう...
-ベン