首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从javascript对象中删除该数据结构中的数据?

如何从javascript对象中删除该数据结构中的数据?
EN

Stack Overflow用户
提问于 2012-01-24 06:01:03
回答 4查看 16.7K关注 0票数 2

我需要阅读所有的连接时间。(connectionTimes)我需要删除该行-当它离线超过在线时:

代码语言:javascript
复制
    userId: 1,
    connectionTimes:
        [
            {onlineTime:"11:10:30", offlineTime:"11:18:12"}, //delete
            {onlineTime:"11:14:14", offlineTime:"11:52:41"}  //delete
        ]

删除用户id -连接将为空的时间。

代码语言:javascript
复制
 userId: 1, //delete userid
        connectionTimes:
            [
                //empty connection
            ]

我有这样的数据结构:

代码语言:javascript
复制
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"}
            ]
    } 
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-01-24 06:14:05

可以使用delete运算符从JavaScript对象中删除属性:

代码语言:javascript
复制
var sampleObject = {
    "key1": "value1",
    "key2": "value"
};
delete sampleObject["key2"];

或者像这样:

代码语言:javascript
复制
delete sampleObject.key2

有关删除运算符:https://developer.mozilla.org/en/JavaScript/Reference/Operators/delete的更多背景信息,请参阅Mozilla Developer Network JavaScript Reference

您的特定示例将如下所示:

代码语言:javascript
复制
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/

票数 9
EN

Stack Overflow用户

发布于 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,未定义的

因此,在您的情况下,我们可能会这样做:

代码语言:javascript
复制
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; });
票数 2
EN

Stack Overflow用户

发布于 2012-01-24 06:07:24

基本上,您想要使用类似于以下内容:

代码语言:javascript
复制
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--;
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8979234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档