2012-01-30 4 views
1

Мне нужно время, чтобы сравнить онлайн и офлайн время. Если это более автономное время, чем онлайн-время - на этот раз мне нужно удалить. Когда у пользователя нет временной линии - мне нужно удалить этого пользователя.Как удалить данные из массива js из этой структуры данных?

У меня есть эта проблема: При переходе через времена и smažuj это: сохраняется значение «не определено» - [не определено, не определено], а затем это условие не может быть удовлетворено -

if (user.connectionTimes.length === 0) { 
     delete users[id]; 
    } 

Как я решите эту проблему?

Я использую следующий код:

 var users = []; 

     users[0] = { 
      userId: 1, 
      connectionTimes: 
       [ 
        {onlineTime:30, offlineTime:70}, 
        {onlineTime:50, offlineTime:75} 
       ] 
     }; 

     users[1] = { 
      userId: 2, 
      connectionTimes: 
       [ 
        {onlineTime:80, offlineTime:70} 
       ] 
     }; 

     users[2] = { 
      userId: 3, 
      connectionTimes: [] 
     }; 

     for(var i=0; i<users.length; i++) { 
     for(var j=0; j<users[i].connectionTimes.length; j++) { 
      if(users[i].connectionTimes[j].onlineTime < users[i].connectionTimes[j].offlineTime) { 
    delete users[i].connectionTimes[j];   
    //EDIT - this work - users[i].connectionTimes.splice(j, 1); 
    //j--; 
      } 
     } 
     if(users[i].connectionTimes.length == 0) { 
delete users[i]; 

      //EDIT - this work - users.splice(i, 1); 
      //i--; 
     } 
    } 

     console.log(users); 

ответ

4

delete оставит дыру в массиве.

Чтобы удалить весь слот, позвоните по телефону array.splice(index, 1).
Это приведет к смещению всех последующих слотов вниз на 1, чтобы заполнить отверстие.

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

+0

Как использовать эту функцию «сращивание» в этом состоянии? 'if (connectionTime.onlineTime Jenan

+2

' user.connectionTimes.splice (i, 1) '? – SLaks

2

delete удалит свойства объекта, но в массиве он просто устанавливает значение в этом индексе undefined.

var arr = [1, 2, 3]; 
delete arr[0]; 
//undefined, 2, 3 

Чтобы удалить элемент массива, вы можете использовать splice. Таким образом, вместо:

delete users[id]; 

Вы бы:

users.splice(id, 1); 
1

удалить не будет удалить индекс, будет включать только значение не определено.
то, что вы ищете, сращивание(), попробуйте следующее:

if (user.connectionTimes.length === 0) { 
    users[id].splice(id, 1); 
} 
Смежные вопросы