Tengo 2 matrices de objetos.
array1 = [ { "name": "B", "order": 1 }, { "name": "C", "order": 2 }, { "name": "D", "order": 3 }, { "name": "B", "order": 4 }, { "name": "A", "order": 5 } ] array2 = [ { "name": "B", "order": 1, "id": 3638 }, { "name": "B", "order": 1, "id": 3661 }, { "name": "C", "order": 2, "id": 3658 }, { "name": "D", "order": 3, "id": 3659 }, { "name": "A", "order": 5, "id": 3636 } ]Necesito ordenar array2 para que coincida con el mismo orden de array1 según el nombre de la propiedad. En array2 hay 2 propiedades de nombres iguales al valor B. Estos nombres B están juntos pero necesito que el array esté en el orden exacto de array1. En array1, la primera B está en el índice 0 y la segunda B está en el índice 3.
Hice estos intentos sin suerte.
array2.sort((a, b) => array1.indexOf(a.name) - array1.indexOf(b.name)); let sorted = array2.sort((a, b) => { return array1.findIndex(p => p.name=== a.name) - array1.findIndex(p => p.name=== b.name); });Puede probar esto, encuentra el primer elemento en array2 que coincide con el nombre, en orden, de array1 ... lo elimina de array2 y luego lo agrega a sortedArray2 .
const array1 = [ { "name": "B", "order": 1 }, { "name": "C", "order": 2 }, { "name": "D", "order": 3 }, { "name": "B", "order": 4 }, { "name": "A", "order": 5 } ] const array2 = [ { "name": "B", "order": 1, "id": 3638 }, { "name": "B", "order": 1, "id": 3661 }, { "name": "C", "order": 2, "id": 3658 }, { "name": "D", "order": 3, "id": 3659 }, { "name": "A", "order": 5, "id": 3636 } ] const sortedArray2 = [] for(const item of array1) { sortedArray2.push( array2.splice( array2.findIndex(elem => elem.name === item.name), 1 ) ) } console.log(sortedArray2)