我需要时间来比较在线和离线时间。如果离线时间比在线时间更多 - 这次我需要删除。当用户没有时间线时 - 我需要删除此用户。
我有这个问题:当经历时间和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);
答案 0 :(得分:4)
delete
会在数组中留下一个洞。
要实际删除整个广告位,请致电array.splice(index, 1)
这会将所有后续插槽向下移动1以填补空洞。
你应该在向后循环中执行此操作,否则最终会跳过下一个项目。
答案 1 :(得分:2)
delete
将从对象中删除属性,但在数组中,它只是将该索引中的值设置为undefined
。
var arr = [1, 2, 3];
delete arr[0];
//undefined, 2, 3
要删除数组条目,您可以使用splice。所以而不是:
delete users[id];
你会这样做:
users.splice(id, 1);
答案 2 :(得分:1)
删除不会删除索引,只会将值变为undefined。
你要找的是splice(),试试这个:
if (user.connectionTimes.length === 0) {
users[id].splice(id, 1);
}