2012-01-30 64 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 2012-01-30 16:57:15

+2

'user.connectionTimes.splice(i,1)'? – SLaks 2012-01-30 16:58:01

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); 
}