¿Qué idioma se utiliza para el algoritmo de cepillado frontal?
Leecode puede usar js para responder preguntas. ¿Mi gran js es cada vez más reconocido? Pero algunas funciones de js caerán en la trampa cuando respondas preguntas. Permítanme resumir los obstáculos en los que he caído.
Pit 1: El objeto de matriz en JS es un objeto de referencia.
En js, además del objeto, los objetos de matriz también son objetos de referencia, lo que a menudo se ignora. Por lo tanto, al pasar una matriz de forma recursiva, debe usar arr.slice(0) para copiar una nueva matriz; de lo contrario, la matriz entrante se cambiará recursivamente en el mismo nivel y el resultado será incorrecto.
Así que, siempre que se copie la matriz, es mejor escribirla así, a menos que realmente quieras hacer referencia a ella. Tenga en cuenta que existe una gran diferencia entre cortar y empalmar. Si usa splice(0), también puede copiar la matriz, pero la matriz original se eliminará ya que el empalme es una operación.
Para elementos agregados y eliminados, el valor de retorno es una colección de elementos eliminados. splice(0) significa eliminar desde idx hasta el final de la matriz, por lo que el valor de retorno también es esa matriz. El segmento (inicio, final) puede entenderse como segmento. Omitir el final significa llegar al final de la matriz. Si el final es negativo, cuente desde el final de la matriz.
De forma predeterminada, Pit 2: la clasificación en JS está en orden lexicográfico.
Por lo general, al ordenar, la gente piensa que si está en orden ascendente, no es necesario escribir la función de comparación. Sin embargo, arr.sort() en js está ordenado lexicográficamente, lo que hace que obtenga el efecto deseado al usar sort cuando la matriz no es negativa, pero es incorrecto si hay números negativos.
Por ejemplo, arr=?
Así que recuerde escribir funciones de comparación, no sea perezoso, es mejor escribir funciones anónimas.
Foso tres: no hay promoción variable en la función.
De hecho, esto generalmente no es fácil de hacer, principalmente porque combiné el segundo error en ese momento. Cuando personalicé la función de comparación, escribí var compare = function (a, b) { return ab }, lo cual es cierto, pero lo escribí en sort, por lo que sort no puede encontrar la función de comparación, por lo que termina con Default. orden de los personajes.
Creo que hay algo mal en la definición de comparación. Existe un "levantamiento de variables" para definir variables en una función, lo que significa que definir vara en cualquier parte de la función es equivalente a definir vara al comienzo de la función, por lo que después de acostumbrarse, olvida que las funciones no son variables y no hay elevación variable. No encontrará la definición a continuación. Entonces, cuando escriba una función de comparación,
escríbala como una función anónima.
Pit 4: Las operaciones de punto flotante son inexactas
Pruebe console.log (0.3-0.2) y encontrará que es 0.00998. Descubrí que siempre que haya. Números impares de punto flotante, js no puede calcular con precisión. Esto debería estar relacionado con el mecanismo de almacenamiento de números de punto flotante en js. No existe una buena solución para este problema. En términos generales, la respuesta es conservar 2 o 3 decimales y utilizar fijo(n) para conservar directamente.
n dígitos son suficientes, este método originalmente es redondeo. Pero siempre hay situaciones en las que deseas tomar límites superiores e inferiores en lugar de redondearlos, por lo que solo puedes modificarlos de algunas maneras. Por ejemplo, desea tomar los dos primeros dígitos: (a* 100-b * 100)/100.
Pozo 5: Determinar si la matriz está vacía.
Si (!Arr), dado que las matrices no se convierten implícitamente como variables, puedes usar arr.length>0, pero en algunos casos, tal vez esa variable no sea una matriz, por lo que no puedes usar Para encontrar la longitud, vi un método más completo en Internet, que consiste en juzgar el objeto primero.
Si la parte inferior es un tipo de matriz, entonces use la longitud para juzgar.