повторения в массиве
Добрый день, друзья, ни разу не обращался сюда за помощью, но этот момент таки настал, смотрите, имеем две функции, одна для записи в массив, данных вторая для считывания из массива, если с пробежками по массиву никаких проблем нет, то с записью мне нужна помощь, проблема в следующем, ах да простите, вот код:
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, время: 21:42. |