2016-04-27 7 views
1

配列を再構築しようとしていますので、ベストプラクティスを使用して配列を作成することを推奨します。 次のように私は配列オブジェクトを持っている:「URL」は同じであるため、グループに私が欲しい、それ同じオブジェクトを上記で配列オブジェクトの変更

MainObject: 
0:"Namebar" 
    1: Object 
    Name: "Title1" 
    Url: "Url1" 
    2: Object 
    Name: "Title2" 
    Url: "Url2" 
    3: Object 
    Name: "Title3" 
    Url: "Url1" 

を、私は次の形式で出力を期待しています:

0: "Url1" 
    1: Object 
    Name : "Title1" 
    Url: "Namebar" 
    2: Object 
    Name : "Title3" 
    Url: "Namebar" 

1: "Url2" 
    1: Object 
    Name : "Title2" 
    Url: "Namebar" 

私は2つの配列を持ち、MainObjectをループして、私が知っている項目を交換することを心がけていますが、時間の複雑さは非常に高いです。例えば が好き:

var extract1 = MainObject[0]; 
var extract2 = using for loop to extract and swap ...... 

私はこれを達成するための他の方法を取得しておりません。これのjavascript/jqueryでの任意のアプローチですか?

+0

'MainObject'で' Namebar'のプロパティ名は何ですか?そして、MainObjectの配列のプロパティ名は何ですか? –

+0

@AlexArt:Namebarにはpropertynameはありません。MainObject [0]は "Namebar"として出力しますが、MainObject [1]と2は上記の構造を持つ配列です – user1400915

+0

どのように入れ子配列を取得しますか? –

答えて

3

これは、ジョブを実行する必要があります。

var extract1 = MainObject[0]; 
var newArray = {}; 
var newArrProp; 
var extract1Props = Object.keys(extract1); 
for(i = 0; i< extract1Props.length; i++) 
{ 
    newArrProp = extract1Props[i]; 
    var nestedObjects = extract1[newArrProp]; 
    for(j = 0; j < nestedObjects.length; j++) 
    { 
     if(!newArray[nestedObjects[j].Url]) 
     { 
      newArray[nestedObjects[j].Url] = [];    
     } 
     newArray[nestedObjects[j].Url].push({Name:nestedObjects[j].Name,Url:newArrProp}); 
    } 
} 

Working fiddle

2

いくつかのループを使用できます。

var MainObject = [{ "Namebar": [{ Name: "Title1", Url: "Url1" }, { Name: "Title2", Url: "Url2" }, { Name: "Title3", Url: "Url1" }] }], 
 
    object2 = []; 
 

 
MainObject.forEach(function (a) { 
 
    Object.keys(a).forEach(function (k) { 
 
     a[k].forEach(function (b) { 
 
      var temp = {}; 
 
      if (!this[b.Url]) { 
 
       temp[b.Url] = []; 
 
       this[b.Url] = temp[b.Url]; 
 
       object2.push(temp); 
 
      } 
 
      this[b.Url].push({ name: b.Name, Url: k }); 
 
     }, this); 
 
    }, this); 
 
}, Object.create(null)); 
 

 
document.write('<pre>object2 ' + JSON.stringify(object2, 0, 4) + '</pre>'); 
 
document.write('<pre>MainObject ' + JSON.stringify(MainObject, 0, 4) + '</pre>');

関連する問題