2016-09-05 4 views
-1

Liste A mit den folgenden Punkten Gegeben {Neuordnen Artikel in zwei Listen

var A = [A,B, [A,B,C],[A,B,C],[A,B,C,D],[A,B],A,B,C] 

Und Liste B mit allen Elementen in der Liste A abgeflacht:

var B = [A,B,A,B,C,A,B,C,A,B,C,D,A,B,A,B,C] 

Beachten Sie, dass die innere Anordnung in Liste B repräsentieren Gruppen.

Was die effizienteste Art und Weise der Wieder ist ein Element in der Liste A der Bestellung, die Reihenfolge in der Liste B.

Zum Beispiel berücksichtigt werden soll, wenn das Element B in der inneren Anordnung in Liste A wird vor A bewegen sollten die Listen aktualisiert werden, wie folgt:

var A = [A,B, [B,A,C],[A,B,C],[A,B,C,D],[A,B],A,B,C] 
    var B = [A,B,B,A,C,A,B,C,A,B,C,D,A,B,A,B,C] 

Was habe ich bisher versucht:

Ehrlich gesagt, ich bin stecken! Ich habe versucht, die Liste A zu reduzieren und das entsprechende Element basierend auf dem Index in Liste B zu bekommen, dies funktioniert jedoch nicht zuverlässig. Zum Beispiel scheint es zu funktionieren, wenn es zwei Elemente in allen inneren Gruppen gibt, jedoch mit mehr als zwei Elementen, fällt es auseinander, da die Indizes nicht zusammenpassen. Ich bekomme manchmal Probleme, wenn die Liste groß ist, da sie auf einen Index verweisen kann, der bereits bearbeitet wurde, und nein, ich habe keine Kontrolle über die Änderungen. Mein aktueller Versuch kann wie folgt zusammengefasst werden:

B.indexOf(itemFromA) + indexFromA; 
+0

Ich schlage vor, die ursprüngliche Anordnung zu bestellen und später eine flache zu bekommen. –

Antwort

0

Sie einen rekursiven Ansatz versuchen könnten, wo Sie alle Elemente list A-list B eins nach dem anderen hinzufügen.

//list = list that should be represented in B 
//newList = []; 
function sortList(list,newList) { 
    for(var elem of list) { 
     if (typeof(elem) === "object") { 
      sortList(elem,newList); 
     } else { 
     newList.push(elem); 
     } 
    } 
    return newList; 
} 

B = sortList(A,[]); 

Schauen Sie sich das jsfiddle wenn dies ist, was Sie wollen?

+0

Nein, das ist nicht hilfreich. Beachten Sie, dass die Arrays die gleiche Reihenfolge haben sollen und nicht nur eine Zusammenführung – tweeterist