Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.12.2012, 13:40
Новичок на форуме
Отправить личное сообщение для deeputy Посмотреть профиль Найти все сообщения от deeputy
 
Регистрация: 10.12.2012
Сообщений: 6

повторения в массиве
Добрый день, друзья, ни разу не обращался сюда за помощью, но этот момент таки настал, смотрите, имеем две функции, одна для записи в массив, данных вторая для считывания из массива, если с пробежками по массиву никаких проблем нет, то с записью мне нужна помощь, проблема в следующем, ах да простите, вот код:

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, 11.12.2012 в 13:44.
Ответить с цитированием
  #2 (permalink)  
Старый 11.12.2012, 14:24
Профессор
Отправить личное сообщение для Hoshinokoe Посмотреть профиль Найти все сообщения от Hoshinokoe
 
Регистрация: 08.01.2012
Сообщений: 253

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, 11.12.2012 в 14:26.
Ответить с цитированием
  #3 (permalink)  
Старый 11.12.2012, 14:35
Новичок на форуме
Отправить личное сообщение для deeputy Посмотреть профиль Найти все сообщения от deeputy
 
Регистрация: 10.12.2012
Сообщений: 6

Hoshinokoe, нет, так я уже тоже пытался сделать, так и так в итоге видим удвоение каждой последующей записи.
p.s. back.push(); добавляет, но суть как раз в том что каким бы образом я не добавлял в конец массива что-то новое, каким то образом вместо одной записи в конец массива попадает вдвое больше одинаковых записей от предыдущего значения.

Последний раз редактировалось deeputy, 11.12.2012 в 14:41.
Ответить с цитированием
  #4 (permalink)  
Старый 11.12.2012, 14:51
Аватар для ОлегА
Профессор
Отправить личное сообщение для ОлегА Посмотреть профиль Найти все сообщения от ОлегА
 
Регистрация: 25.08.2011
Сообщений: 420

когда вы вызывается 1-ый раз функцию writehistory у вас back заполняется данными, но когда вы вызываете ее еще раз, то back уже существует и данные в нем есть и он еще раз дополняется теми данными которые уже есть у вас, потому что вы его в цикле крутите

нужно делать проверку, если в back уже есть такое значение, то делать continue например
Ответить с цитированием
  #5 (permalink)  
Старый 11.12.2012, 14:54
Аватар для ОлегА
Профессор
Отправить личное сообщение для ОлегА Посмотреть профиль Найти все сообщения от ОлегА
 
Регистрация: 25.08.2011
Сообщений: 420

можно сделать так

function writehistory(f) {
 
 if (back[0] !== undefined) {
    back.push(f);
 } else {
    back[0] = f;
 }
}
Ответить с цитированием
  #6 (permalink)  
Старый 11.12.2012, 15:43
Новичок на форуме
Отправить личное сообщение для deeputy Посмотреть профиль Найти все сообщения от deeputy
 
Регистрация: 10.12.2012
Сообщений: 6

Прошу прощения за свою глупость, код размером в полторы тысячи строк пришлось по полочкам разобрать, в итоге нашел где собака спрятана, в замыканиях, одна функция вызывала другую, та в свою очередь зависела от третьей , вот вся эта катавасия игнорировала условия, точнее не игнорировала а применяла размноженное значение что приводило к штампованию значений, я то уже думал с ума сойду почему не работает то что по определению сломаться не может.

Спасибо все кто откликнулся, проблему нашел, исправил, пошел дальше, тему можно считать закрытой.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
функция в массиве macdack Общие вопросы Javascript 1 11.04.2012 16:40
поиск HTMLElement'а в массиве z700i Общие вопросы Javascript 15 07.01.2012 21:13
Как найти индекс по элементу в двумерном массиве? bayah Общие вопросы Javascript 5 22.04.2010 16:26
Объекты в массиве. delias Общие вопросы Javascript 2 21.04.2010 22:28
видимость предка в массиве scuter Общие вопросы Javascript 4 13.08.2008 20:16