2013-09-11 4 views
1

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

var counter=setInterval(timer, 1000); 
var global = []; 
function timer() 
{ 
    var strJSON = '[{"id":"1","timeout":"2013-09-11 03:00:00"},{"id":"2","timeout":"2013-09-11 03:00:00"}]'; 
    var currentRequest = []; 
    var obj = jQuery.parseJSON(strJSON); 
    for (var i=0; i<obj.length; i++) { 
     var id = obj[i].id; 
     var timeout = obj[i].timeout; 
     if(id in global) 
     { 
      alert(id+' in array'); 
     } else { 
      alert(id+' not in array'); 
      alert(id+' added'); 
      global.push(id); 
     } 
    } 
} 

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

/** ПЕРВЫЙ ПУСК **/

  • 1 не в массиве
  • 1 добавили
  • 2 не в массиве
  • 2 добавлено

/** ** ВТОРОЙ ПУСК/

  • 1 в массиве
  • 2 не в массиве
  • 2 добавлено

/** ** ТРЕТИЙ RUN/

  • 1 в массиве
  • 2 в массиве

Что я здесь делаю неправильно?

ответ

5

id in global не используется для проверки элемента в массиве. Вместо этого вам нужно использовать .indexOf.

> "1" in ["1","2"] 
true 
> "2" in ["1","2"] 
false 

property in object, чтобы проверить существует ли свойство в объекте.

Array 0-indexed, поэтому "0" in ["1","2"] и "1" in ["1", "2"] будет правдой, но не "2".

Так что вам нужно изменить

if(id in global) 

к

if (global.indexOf(id) > -1) 

Примечание: Вы должны подкладку для старых браузеров, которые не поддерживают indexOf метод массива.

Смежные вопросы