a = [3, 1, 2]; function b(v1, v2) { console.log('c', v1, v2); return 0 }; a.sort(b); console.log(a);un resultado de este script es así
do 31 do 12 [3, 1, 2]
mi pregunta es
¿Por qué se llama dos veces a la función b?
Y en el primer log console.log('c', v1, v2);
por qué el valor v1 es el primer valor de matriz de a. es 3"
también por qué v2 es el segundo valor de matriz de "a"
en el segundo registro console.log('c', v1, v2); ¿Por qué el segundo y el tercer valor de la matriz en v1, v2 el resultado es "c 1 2"?
no puedo entender
La función de comparación se llama repetidamente (pasando dos elementos de la matriz cada vez) hasta que la matriz se ordena por completo.
Tiene tres elementos en la matriz, por lo que debe llamarse al menos dos veces.
Los valores específicos que se pasan cada vez dependerán del algoritmo de clasificación que haya seleccionado el motor JS (este es un detalle de implementación, no algo exigido por la especificación JS). El orden en que se comparan los elementos en una ordenación de burbuja será diferente a una ordenación rápida .
¿Por qué se llama dos veces a la función b?
sort llama a la devolución de llamada tantas veces como sea necesario para ordenar la matriz. Cada vez, llama a la devolución de llamada con dos elementos de la matriz para que la devolución de llamada pueda decirle en qué orden deben estar esos dos elementos.
Y en el primer log console.log('c', v1, v2);
por qué el valor v1 es el primer valor de matriz de a. es 3"
también por qué v2 es el segundo valor de matriz de "a"
No lo serán, necesariamente; sort puede llamar a la devolución de llamada con los elementos que desee. El algoritmo específico utilizado para clasificar no está dictado por la especificación. Todo lo que se dicta es que sea estable (no cambie innecesariamente el orden de los elementos equivalentes) y que haga su trabajo utilizando la devolución de llamada proporcionada, si corresponde.