2016-04-27 18 views
1

Ich versuche, ein Array neu zu erstellen, also brauche ich einen Vorschlag, dies mit Best Practices zu tun. Ich habe ein Array-Objekt wie folgt:Änderung von Array-Objekten

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

Im oben, da die „url“ gleich ist, ich möchte es Gruppe gleiche Objekt, und ich bin die Ausgabe in folgendem Format erwartet:

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

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

Ich versuche, zwei Arrays und Schleife durch das MainObject für den Austausch der Elemente, die ich weiß, ist nicht nur ein tediöser Prozess, sondern sehr viel Zeit Komplexität. Zum Beispiel mag:

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

ich nicht anders bin immer, dies zu erreichen. Irgendein Ansatz dafür in Javascript/jquery?

+0

was ist der Eigenschaftsname für 'Namebar' im' MainObject'? Und was ist der Name der Eigenschaft eines Arrays in 'MainObject' –

+0

@AlexArt .: Es gibt keine Eigenschaft Name für NameBar, nur MainObject [0] gibt Ausgabe als" NameBar ", während MainObject [1] und 2 Arrays mit Strukturen wie oben sind – user1400915

+0

Wie erhalten Sie verschachtelte Array? –

Antwort

3

Dies sollte die Arbeit machen:

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

Sie könnten einige Schleifen verwenden.

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>');

Verwandte Themen