我需要阅读所有的连接时间。(connectionTimes)我需要删除该行-当它离线超过在线时:
userId: 1,
connectionTimes:
[
{onlineTime:"11:10:30", offlineTime:"11:18:12"}, //delete
{onlineTime:"11:14:14", offlineTime:"11:52:41"} //delete
]删除用户id -连接将为空的时间。
userId: 1, //delete userid
connectionTimes:
[
//empty connection
]我有这样的数据结构:
var users = [];
users[0] = {
userId: 1,
connectionTimes:
[
{onlineTime:"11:10:30", offlineTime:"11:18:12"},
{onlineTime:"11:14:14", offlineTime:"11:52:41"}
]
}
users[1] = {
userId: 2,
connectionTimes:
[
{onlineTime:"8:08:14", offlineTime:"1:15:00"}
]
} 发布于 2012-01-24 06:14:05
可以使用delete运算符从JavaScript对象中删除属性:
var sampleObject = {
"key1": "value1",
"key2": "value"
};
delete sampleObject["key2"];或者像这样:
delete sampleObject.key2有关删除运算符:https://developer.mozilla.org/en/JavaScript/Reference/Operators/delete的更多背景信息,请参阅Mozilla Developer Network JavaScript Reference
您的特定示例将如下所示:
for(var id in users) {
var user = users[id];
if (user.connectionTimes.length === 0) {
delete users[id];
break
}
for(var i=0; i<=user.connectionTimes.length; i++) {
var connectionTime = user.connectionTimes[i];
if (connectionTime.onlineTime < connectionTime.offlineTime) {
delete users[id];
break;
}
}
}这里有一个指向jsFiddle的链接,显示了实际运行的代码:http://jsfiddle.net/Q86Jd/
发布于 2012-01-24 06:24:34
在Javascript中,有很多方法可以从数组中删除内容。我能想到的主要原因是
delete操作符。使用它可以将所选位置设置为undefined,类似于将元素设置为null。(主要区别在于,删除键将导致在使用forEach和map数组方法迭代时跳过它)。var xs = 0,1,2;xs1;console.log(xs);// 0,未定义,2
splice方法可以删除块或数组,将剩余元素向左移动以填充它。var xs = 0,1,2,3;xs.splice(2,1);// console.log,ammount删除var(Xs);//0,1,3
length属性会截断它。当你想要更多的控制时,这可以用来以传统的方式手动删除元素。var xs = 0,1,2,3;xs.length = 2;console.log(xs);// 0,1 xs.length = 4;console.log(xs);// 0,1,未定义的
因此,在您的情况下,我们可能会这样做:
function filter_in_place(array, predicate){
var j=0;
for(var i=0; i<arr.length; i++){
var x = arr[i];
if(pred(x)){
arr[j++] = x;
}
}
arr.length = j;
}
for(var i=0; i < users.length; i++){
filter_in_place( users[i].connections, function(conn){
/*return if offline larger then online*/
});
}
filter_in_place(users, function(user){ return user.connections.length > 0; });发布于 2012-01-24 06:07:24
基本上,您想要使用类似于以下内容:
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];
j--;
}
}
if( users[i].connectionTimes.length == 0) {
delete users[i];
i--;
}
}https://stackoverflow.com/questions/8979234
复制相似问题