El método transversal más utilizado es para declaraciones (también recursivas y mientras). Cuando atravesamos una matriz, generalmente hacemos esto:
La copia del código es la siguiente:
var arr = [1,2,3,4,5,6,7,8,9,10];
para (var i = 0, total = arr.length; i <total; i ++) {
console.log (i, arr [i]);
}
Este es el método transversal más utilizado: transversal de orden positivo. Va desde el primer elemento en la matriz hasta el último elemento.
Entonces, ¿por qué el pequeño drama todavía menciona el recorrido de orden inverso hoy?
Aquí tenemos que mencionar el módulo más utilizado en el componente escrito por Xiaoju: Events. Se utiliza para crear modelos de eventos personalizados, manejar la escucha y activación del evento, el modo más simple de publicación y suscripción. Debido a que recientemente descubrió que existe un peligro oculto de desbordamiento de la memoria, es necesario agregar un método para desabrochar la base original.
Debido a que la función de devolución de llamada con el mismo nombre del evento se coloca en la misma matriz, el desgaste solo requiere encontrar la función de devolución de llamada correspondiente de la matriz (la misma función de devolución de llamada puede estar vinculada varias veces) y eliminarla.
Es un requisito muy simple, por lo que naturalmente escribí un código similar al siguiente:
La copia del código es la siguiente:
// retira 2 en la matriz
var arr = [1,2,2,2,2,1,1,2,2];
para (var i = 0, total = arr.length; i <total; i ++) {
if (arr [i] == 2) {
// cumplir con las condiciones, eliminar
arr.splice (i, 1);
}
}
console.log (arr);
No hay código normal, pero la salida final es: [1, 2, 2, 1, 1, 2]. Obviamente, el resultado de la ejecución no cumple con las expectativas.
¿Cuál es el problema?
Después de un análisis cuidadoso, descubrí que el problema es que cada vez que el partido sea exitoso, después de realizar la operación de eliminación, el siguiente elemento a verificar se omitirá porque cada elemento en la matriz aumentará uno por uno.
Encontré el problema, cambié el código y, después de realizar la operación de eliminación, ajuste el índice de secuencia (i).
La copia del código es la siguiente:
// retira 2 en la matriz
var arr = [1,2,2,2,2,1,1,2,2];
para (var i = 0, total = arr.length; i <total; i ++) {
if (arr [i] == 2) {
// cumplir con las condiciones, eliminar
arr.splice (i, 1);
// ajustar el índice de secuencia
i = i-1;
}
}
console.log (arr);
El problema se ha resuelto, pero siempre siento que modificar el índice de secuencia es un truco para hacer un bucle for. Entonces, un destello de inspiración y una bofetada, y el siguiente código fue eliminado:
La copia del código es la siguiente:
// retira 2 en la matriz
var arr = [1,2,2,2,2,1,1,2,2];
para (var i = arr.length-1; i! =-1; i-) {
if (arr [i] == 2) {
// cumplir con las condiciones, eliminar
arr.splice (i, 1);
}
}
console.log (arr);
El proceso transversal permanece sin cambios. Lo único que cambia es que el orden de recorrido ha cambiado. Por cierto, también falta un total variable.
Ok, admito que lo que escribí hoy es muy sedoso, pero a través de este ejemplo, te recuerdo al escribir código en el futuro. Durante el proceso de recorrido, si implica modificar la matriz en sí (agregar y eliminar), el recorrido inverso es un método de recorrido relativamente seguro.
¡Codificando notas, déjalos burlarse en el futuro!
Indique la fuente de reimpresión: http://bh-lay.com/blog/148c07761fa