Realmente no sé cómo explicar mi problema, lo siento por el título.
Tengo tres matrices de JavaScript:
//indexing array originalData = ['data1', 'data2', 'data3'] //target array originalPos = ['50 a', '80 b', '31 c'] //updated indexing array newData = ['data1', 'data3', 'data2'] Con esa matriz, quiero obtener el nuevo orden de la matriz originalPos usando una matriz newData como esta:
originalPos = ['50 a', '31 c', '80 b'] El objetivo es poder cambiar la posición de mis waypoints en Leaflet Routing Machine usando L.routing.machine.spliceWaypoints()
Puede reorganizar encontrando la posición de cada elemento de originalPos en originalData y con esa posición respectiva puede empujar el elemento de newData a la matriz de resultados.
Suponiendo que no hay datos duplicados dentro de las tres matrices
const originalData = ['data1', 'data2', 'data3'] const originalPos = ['50 a', '80 b', '31 c'] const newData = ['data1', 'data3', 'data2'] const newPos = newData.map(n => n && originalPos[originalData.indexOf(n)]); console.log(newPos);Tome nota de los índices en los que se encuentran las claves originales en originalData (utilizando un mapa o un objeto simple). Luego asigne las claves en el nuevo orden ( newData ) al índice en ese mapeo, y tome el valor en ese índice en los datos de entrada ( originalPos ):
const originalData = ['data1', 'data2', 'data3']; const originalPos = ['50 a', '80 b', '31 c']; const newData = ['data1', 'data3', 'data2']; const map = new Map(originalData.map((val, i) => [val, i])); const result = newData.map((val, i) => originalPos[map.get(val)]); console.log(result); NB: el uso del mapa evitará un escaneo en la primera matriz en cada iteración (como con indexOf ), lo que le dará una mejor complejidad de tiempo.