повторения в массиве
Добрый день, друзья, ни разу не обращался сюда за помощью, но этот момент таки настал, смотрите, имеем две функции, одна для записи в массив, данных вторая для считывания из массива, если с пробежками по массиву никаких проблем нет, то с записью мне нужна помощь, проблема в следующем, ах да простите, вот код:
function readhistory() { for(var n in back) { alert(back[n]); } n++; alert('всего '+n); } function writehistory(f) { for(var n in back) { } if (back[0]) { back[++n] = f; } else { back[0] = f; } } так вот о проблеме, когда передаем в функцию writehistory(f) поочередно несколько параметров путем многократного запуска функции, например сначала "А" потом "B" потом "С", то в массиве видим следующее "A,B,B,C,C,C,C" аж семь элементов, и с каждым вызовом функции writehistory(f) получаем удвоение, если за предыдущими действиями отправить в функцию "D" то получим "A,B,B,C,C,C,C,D,D,D,D,D,D,D,D" и так далее, как побороть этот недуг? почему так происходит? будьте добры, помогите понять. |
deeputy,
Попробуй так: var back = []; function read_history() { for (var i = 0; i < back.length; i++) { alert(back[i]); } alert("Total " + back.length); } function write_history(data) { back.push(data); // метод push добавляет элемент в конец массива } |
Hoshinokoe, нет, так я уже тоже пытался сделать, так и так в итоге видим удвоение каждой последующей записи.
p.s. back.push(); добавляет, но суть как раз в том что каким бы образом я не добавлял в конец массива что-то новое, каким то образом вместо одной записи в конец массива попадает вдвое больше одинаковых записей от предыдущего значения. |
когда вы вызывается 1-ый раз функцию writehistory у вас back заполняется данными, но когда вы вызываете ее еще раз, то back уже существует и данные в нем есть и он еще раз дополняется теми данными которые уже есть у вас, потому что вы его в цикле крутите
нужно делать проверку, если в back уже есть такое значение, то делать continue например |
можно сделать так
function writehistory(f) { if (back[0] !== undefined) { back.push(f); } else { back[0] = f; } } |
Прошу прощения за свою глупость:), код размером в полторы тысячи строк пришлось по полочкам разобрать, в итоге нашел где собака спрятана, в замыканиях, одна функция вызывала другую, та в свою очередь зависела от третьей:blink: , вот вся эта катавасия игнорировала условия, точнее не игнорировала а применяла размноженное значение что приводило к штампованию значений, я то уже думал с ума сойду почему не работает то что по определению сломаться не может.
Спасибо все кто откликнулся, проблему нашел, исправил, пошел дальше, тему можно считать закрытой. |
Часовой пояс GMT +3, время: 10:26. |