Наиболее часто используемый метод обхода предназначен для операторов (также рекурсивных и пока). Когда мы пересекаем массив, мы обычно делаем это:
Кода -копия выглядит следующим образом:
var arr = [1,2,3,4,5,6,7,8,9,10];
для (var i = 0, total = arr.length; i <total; i ++) {
console.log (i, arr [i]);
}
Это наиболее часто используемый метод обхода: пересечение положительного порядка. Он переходит от первого элемента в массиве к последнему пункту.
Тогда почему небольшая драма все еще упоминает об отслеживании обратного порядка сегодня?
Здесь мы должны упомянуть наиболее часто используемый модуль в компоненте, написанный Xiaoju: события. Используется для создания пользовательских моделей событий, обработки прослушивания событий и запуска, простейшего режима публикации и подписки. Поскольку недавно обнаружил, что существует скрытая опасность переполнения памяти, необходимо добавить метод, который можно склонить на исходной основе.
Поскольку функция обратного вызова с тем же именем события размещается в одном и том же массиве, для распределения только необходимо найти соответствующую функцию обратного вызова из массива (такая же функция обратного вызова может быть связана несколько раз) и удаляет ее.
Это очень простое требование, поэтому я, естественно, написал код, похожий на следующее:
Кода -копия выглядит следующим образом:
// Удалить 2 в массиве
var arr = [1,2,2,2,2,1,1,2,2];
для (var i = 0, total = arr.length; i <total; i ++) {
if (arr [i] == 2) {
// соответствовать условиям, удалить
arr.splice (i, 1);
}
}
console.log (arr);
Нормального кода нет, но конечный выход: [1, 2, 2, 1, 1, 2]. Очевидно, что результат исполнения не соответствует ожиданиям.
В чем проблема?
После тщательного анализа я обнаружил, что проблема заключается в том, что каждый раз, когда матч успешно, после выполнения операции удаления, следующий элемент будет пропущен, потому что каждый предмет в массиве будет подниматься на один за другим.
Я нашел проблему, изменил код, и после выполнения операции удаления отрегулируйте индекс последовательности (i).
Кода -копия выглядит следующим образом:
// Удалить 2 в массиве
var arr = [1,2,2,2,2,1,1,2,2];
для (var i = 0, total = arr.length; i <total; i ++) {
if (arr [i] == 2) {
// соответствовать условиям, удалить
arr.splice (i, 1);
// Регулируйте индекс последовательности
i = I-1;
}
}
console.log (arr);
Проблема была решена, но я всегда чувствую, что изменение индекса последовательности - это трюк, чтобы сделать для петли. Итак, вспышка вдохновения и пощечины, и был вычеркнут следующий код:
Кода -копия выглядит следующим образом:
// Удалить 2 в массиве
var arr = [1,2,2,2,2,1,1,2,2];
for (var i = arr.length-1; i! =-1; i-) {
if (arr [i] == 2) {
// соответствовать условиям, удалить
arr.splice (i, 1);
}
}
console.log (arr);
Процесс обхода остается неизменным. Единственное, что меняется, это то, что порядок обхода изменился. Кстати, есть также одна переменная, общая пропала.
Хорошо, я признаю, что то, что я написал сегодня, очень шелковистое, но благодаря этому примеру я напоминаю вам при написании кода в будущем. Во время процесса обхода, если он включает в себя изменение самого массива (добавление и удаление), обратный обход является относительно безопасным методом обхода.
Заметки кодирования, оставьте их, чтобы насмехаться в будущем!
Пожалуйста, укажите источник для перепечатки: http://bh-lay.com/blog/148c07761fa