televisores smart samsung que mejores mejor marcas cual javascript arrays comparison

javascript - smart - sony o samsung tv



javascript sorprendente comparaciĆ³n de matriz (3)

La matriz se convierte en una cadena, que se reduce a .join() , que a su vez une los elementos con una coma ( , ) como delimitador.

"-1,1" < "0,0" === true

porque el código de carácter de - (45) es más pequeño que el código de carácter de 0 (48).

Por otra parte,

"-2" < "-1" === false

porque los códigos de los segundos caracteres se comparan (los primeros son ambos, por lo que aún no da un resultado), y el código de caracteres para 2 (50) es más grande que el código de caracteres de 1 (49), por lo que esto da como resultado false .

Se trata de una clasificación lexográfica (es decir, por códigos de caracteres) y no numérica, incluso si los elementos son números (debido a la coacción de la cadena).

Básicamente no se recomienda comparar arrays. Se define implícitamente como una comparación de cadenas, pero esto puede producir resultados sorprendentes.

Estoy tratando de comparar dos matrices en javascript.

Lo que me gustaría es:

a <b ⇔ i ≥ 0 st a [i] <b [i] y ∀ 0 ≤ j <i, a [j] = b [j]

Así que las matrices de números no negativos funcionan como se desea:

firebug> [0,1,2,3,4] < [1,0,0] true

Y comparando números negativos con cero funciona como se espera:

firebug> [-1, 1] < [0, 0] true

Pero comparar números negativos con números negativos es ... sorprendente:

firebug> [-2] < [-1] false firebug> -2 < -1 true

¿Qué está pasando aquí, para que pueda corregir mi intuición para lo que significa la comparación de matrices en javascript?


No existe tal cosa como la comparación de matrices de JavaScript en ninguna forma similar a la que usted describe.

Lo que sucede en todos los casos es que sus matrices se están convirtiendo primero en cadenas uniendo sus contenidos. Por lo tanto, la cadena "-2" no es menor que la cadena "-1", porque el carácter "2" aparece después de "1" en el conjunto de caracteres. De manera similar, "-1,1" es menor que "0,0" porque el carácter "-" aparece antes de los dígitos.

Puedes ver por ti mismo que en todos los casos tus comparaciones:

array1 < array2

obtener exactamente los mismos resultados que:

("" + array1) < ("" + array2)

o:

array1.join(",") < array2.join(",")


No pude encontrar una respuesta sobre cómo comparar arrays en Javascript y obtener resultados "esperados", así que aquí está el código

compareArrays = function(a, b) { var elA, elB, i, len; for (i = 0, len = Math.min(a.length, b.length); i < len; i++) { elA = a[i], elB = b[i]; if (elA > elB) return 1; if (elA < elB) return -1; } return b.length - a.length; }; console.log(compareArrays([-2], [-1])) # -1 console.log(compareArrays([], [])) # 0 console.log(compareArrays([null], [undefined])) # 0 console.log(compareArrays([1, 2, 3], [1, 2, 3, 4])) # 1 console.log(compareArrays([0, 2], [0, 1])) # 1 console.log(compareArrays([1], [NaN])) # 0 console.log(compareArrays([NaN], [1])) # 0