Tengo 3 o más arreglos que muestran precios (p) basados en puntos de ruptura de peso (w) con identificadores únicos para cada arreglo (i) como el siguiente.
var arr1 = [{w:1,p:10,i:"car1"},{w:2,p:15,i:"car1"},{w:3,p:21,i:"car1"}] var arr2 = [{w:1,p:12,i:"car2"},{w:2,p:13,i:"car2"},{w:3,p:22,i:"car2"}] var arr3 = [{w:1,p:9,i:"car3"},{w:2,p:12,i:"car3"},{w:3,p:33,i:"car3"}]Quiero generar arreglos de "lista de precios" basados en el más barato, el segundo más barato, el tercero más barato, etc.
var cheap1 = [{w:1,p:9,i:"car3"},{w:2,p:12,i:"car3"},{w:3,p:21,i:"car1"}] var cheap2 = [{w:1,p:10,i:"car1"},{w:2,p:13,i:"car2"},{w:3,p:22,i:"car2"}] var cheap3 = [{w:1,p:12,i:"car2"},{w:2,p:15,i:"car1"},{w:3,p:33,i:"car3"}]cuál podría ser la forma más rápida de producir tal salida.
Intenté fusionarlos en una matriz, luego clasificarlos, luego recorrer la matriz y empujar los objetos a las nuevas matrices en función de si los índices de los objetos que tenían el valor (w) eran iguales al valor anterior (w), pero simplemente no funcionaría y parece que no puedo encontrar una manera de resolver esto.
Intenté varias declaraciones if then en varios bucles for y eso funcionó, pero el problema es que podría tener unas 20 matrices que quiero comparar y si las declaraciones no serán viables.
agradezco la ayuda!
Puede ordenar primero por propiedad w y luego por p . Para obtener un resultado de la matriz ordenada, empuje el objeto a la matriz por el resto del índice.
const array1 = [{ w: 1, p: 10, i: "car1" }, { w: 2, p: 15, i: "car1" }, { w: 3, p: 21, i: "car1" }], array2 = [{ w: 1, p: 12, i: "car2" }, { w: 2, p: 13, i: "car2" }, { w: 3, p: 22, i: "car2" }], array3 = [{ w: 1, p: 9,i: "car3" }, { w: 2, p: 12,i: "car3" }, { w: 3, p: 33, i: "car3" }], [cheap1, cheap2, cheap3] = [...array1, ...array2, ...array3] .sort((a, b) => aw - bw || ap - bp) .reduce((r, o, i) => { (r[i % 3] ??= []).push(o); return r; }, []); console.log(cheap1); console.log(cheap2); console.log(cheap3); .as-console-wrapper { max-height: 100% !important; top: 0; }