0

JavaScriptが初めてなので、さまざまなデータ構造の操作に頭を悩ませようとしています。

次のようなオブジェクトのコレクションを取得しました。

{id:1234, photo:"pathtosomejpg"}
{id:1234, photo:"pathtosomejpg2"}
{id:1234, photo:"pathtosomejpg3"}
{id:2234, photo:"pathtosomejpg4"}
{id:2235, photo:"pathtosomejpg5"}

idループが終了したら、 をキーとする 2 次元配列を取得したいと思います。値は、photoその ID に一致するすべての値の配列です。

これが私が試したことです:

var groupedImages = [];
var innerAlbumPhotos = [];

// foreach obj in collection
if groupedImages.hasOwnProperty(obj.id.toString())
 innerAlbumPhotos = groupedImages[obj.id.toString()];

innerAlbumPhotos.push(obj.photo);

groupedImages[obj.id.toString()] = innerAlbumPhotos;

ここで説明するデータ構造を作成するにはどうすればよいですか?

4

3 に答える 3

1

次のことを試してください。

var results = [];
arr.forEach(function( v ) {
  var target = results[ v.id ];
  target 
    ? target.push( v.photo ) 
    : ( results[ v.id ] = [ v.photo ] );
});

デモ: http://jsfiddle.net/elclanrs/YGNZE/4/

于 2012-11-09T02:08:54.887 に答える
0

配列の要素ごとにループを使用します。IDが存在しない場合は、そのIDの新しい配列を作成し、IDが存在する場合は、写真を追加します。

var data = [{id:1234, photo:"pathtosomejpg"},
    {id:1234, photo:"pathtosomejpg2"},
    {id:1234, photo:"pathtosomejpg3"},
    {id:2234, photo:"pathtosomejpg4"},
    {id:2235, photo:"pathtosomejpg5"}];

var result = [];
for (var i = 0; i < data.length; i++) {
    if (result[data[i].id]) {
        result[data[i].id].push(data[i].photo);
    } else {
        result[data[i].id] = [data[i].photo];
    }
}
于 2012-11-09T02:12:19.673 に答える
0

javascriptの配列にはキーがないため、arr [1000] = 1に設定すると、配列には1000個の要素が含まれます。したがって、代わりにオブジェクトを使用する必要があります。

var photo_index = {};
function indexPhoto( photo_object ){
  if( !photo_index[photo_object.id] )
    photo_index[photo_object.id] = [];
  photo_index[ photo_object.id ].push( photo_object.photo );
}

次に、説明したようにフォーマットされたすべてのオブジェクトに対してindexPhotoを呼び出します。

于 2012-11-09T02:16:49.330 に答える