javascript - Reordenación de elementos en dos listas


Dada la lista A con los siguientes elementos{

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

Y la lista B con todos los elementos de la lista A aplanados:

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

Tenga en cuenta que la matriz interna en la lista B representa grupos.

Cuál es la forma más eficiente de volver a ordenar un artículo en la lista A, qué orden debe reflejarse en la lista B.

Por ejemplo, si el elemento B en la matriz interna de la lista A se mueve antes que A, las listas deben actualizarse de la siguiente manera:

    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]

Qué he probado hasta ahora:

Honestamente,¡Estoy atascado! He intentado aplanar la lista A y obtener el elemento correspondiente basado en el índice de la lista B, sin embargo, esto no funciona de manera confiable. Por ejemplo, parece funcionar si hay dos elementos en todos los grupos internos; sin embargo, con más de dos elementos, falla porque los índices no coinciden. A veces tengo problemas cuando la lista es grande, ya que podría hacer referencia a un índice que ya se ha editado y no, no tengo control sobre las ediciones. Mi intento actual se puede resumir como:

B.indexOf(itemFromA) + indexFromA;


------------Respuesta------------

Podría probar un enfoque recursivo en el que agregue todos los elementos de la lista A a la lista B uno por uno.

//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,[]);

Mira este jsfiddle si esto es lo que quieres?

Etiquetas:

Artículos relacionados:

java - ¿Dónde puedo definir los usuarios que siguen un rol?

Python regex, cómo reemplazar múltiples grupos de múltiples coincidencias