Básicamente, tengo esta matriz
array = [[1,0],[2,1],[0,3],[3,2]]¿Hay algún método rápido para convertir la matriz para que se vea así?
array = [[0,3],[3,2],[2,1],[1,0]] Lo que quiero es que el primer elemento de la nueva matriz siempre contenga 0 en el primer lugar de la matriz anidada. Eso es bastante fácil, porque la función sort() hace exactamente eso; la parte difícil es ordenar la nueva matriz como la de arriba.
En los términos más simples, me gustaría que las matrices anidadas estén "conectadas": vea cómo el 3 de la primera matriz anidada coincide con los otros 3 a su derecha y así sucesivamente.
Siéntase libre de dejar cualquier comentario para que pueda tratar de explicar el problema un poco mejor.
Para el ejemplo que dio, la solución más fácil sería ordenar la matriz 2d por el segundo elemento de cada matriz interna, de la siguiente manera:
let array = [[1,0],[2,1],[0,3],[3,2]]; array.sort((a, b) => b[1] - a[1]);De esa manera, puede ordenar la matriz con el método de clasificación de acuerdo con los elementos de las matrices internas.
let array = [[1,0],[2,1],[0,3],[3,2]]; array.sort((a, b) => b[1] - a[1]); console.log(array);Mira este método:
const array = [[1,0],[2,1],[0,3],[3,2]]; const result = [...array]; // Put the subarray with the zero element first // You can use the sort() function but I guess this method // performs better in terms of time for (let i = 0; i < result.length; ++i) { if (result[i][0] === 0) { result.unshift(...result.splice(i, 1)); break; } } // Now reorder the array so that the last index of a subarray // matches with the first index of the other subarray for (let i = 0; i < result.length; ++i) { for (let j = i + 1; j < result.length; ++j) { if (result[i][1] === result[j][0]) { // recollocate the subarray so that it matches the way we want result.splice(i + 1, 0, ...result.splice(j, 1)); break; } } } console.log(result)Puede tomar un objeto como referencia y reconstruir la matriz tomando los elementos encadenados.
const getItems = (reference, value) => { const a = reference[value]; return a ? [a, ...(a[1] === 0 ? [] : getItems(reference, a[1]))] : []; }, array = [[1, 0], [2, 1], [0, 3], [3, 2]], reference = array.reduce((r, a) => (r[a[0]] = a, r), {}), result = getItems(reference, 0); console.log(result);