簡體   English   中英

如何將這些javascript對象解析為分組的2d數組?

[英]How can I parse these javascript objects into a grouped 2d array?

javascript的新手,所以嘗試用不同的數據結構來解決問題。

得到了對象的集合,例如:

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

循環完成后,我想獲得一個以id為鍵的2d數組,其值是所有與該id匹配的photo值的數組。

這是我嘗試過的:

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;

如何創建此處描述的數據結構?

請嘗試以下操作:

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/

我會為數組的每個元素使用一個循環。 如果該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];
    }
}

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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM