【问题标题】:Javascript 2D array row removalJavascript 2D 数组行删除
【发布时间】:2012-01-10 03:27:59
【问题描述】:

我想从 javascript 中的二维数组中删除一个完整的行,其中有一个特定的 id。 我已经搜索过,但找不到任何示例。我怎样才能做到这一点?

我有一个像这样的对象/数组...

[
{"id":"1","title":"Sample Event 1\n","start":"Nov 27 2011 10:30:00 GMT+0000 (GMT)","end":"Nov 27 2011 11:30:00 GMT+0000 (GMT)","allDay":false},
{"id":"2","title":"Sample Event 2","start":"Nov 28 2011 12:30:00 GMT+0000 (GMT)","end":"Dec 01 2011 12:30:00 GMT+0000 (GMT)","allDay":true},
{"id":"3","title":"Sample Event 3\n","start":"Nov 27 2011 11:30:00 GMT+0000 (GMT)","end":"Nov 27 2011 12:30:00 GMT+0000 (GMT)","allDay":false}
]

我的数据是通过 php 和 json_encoded 从 mysql 数据库中提取的,如下所示...

var eventObject = <?php echo json_encode($events);?>;

我的问题是,如果我想删除一整行,例如 id == 1 的行,我该如何实现?

我曾尝试使用 remove 属性,但失败了。

我也尝试过以下方式使用拼接

var eventLocation = eventObject.indexOf(EventId);
eventObject.splice(11,1);

但无济于事。请问有人可以帮忙吗?

【问题讨论】:

    标签: javascript arrays object slice


    【解决方案1】:
    yourarray.filter(function(obj) { return obj.id != "1"; })
    

    适用于现代浏览器

    【讨论】:

    • +1,人们应该开始更多地使用这些。对于 MDC page 上有一个很好的 shim。
    • 谢谢我尝试了以下格式但无济于事......有一天我会掌握javascript。你介意看看吗? function deleteEvent(EventId){ var confirmDeleteEvent = confirm("你确定要删除这个事件吗?"); if(confirmDeleteEvent != true) { return false; } else { eventObject = eventObject.filter(function() { return el.id != EventId}); alert("已删除"+EventId); } }
    • 究竟是什么不起作用,您是否收到错误消息?对我来说似乎很好。但是,您可以将代码缩短为 if( !confirm("Are you sure?") ) return false; /*else*/ search'n'splice()
    【解决方案2】:

    您可以遍历它们,检查 ID,如果找到,请使用 splice

    for(var i = 0; i < eventObject.length; i++) {
        if (eventObject[i].id == "1") {
            eventObject.splice(i, 1);
            break;
        }
    }
    
    console.log(eventObject);
    

    http://jsfiddle.net/SCfaP/

    【讨论】:

    • 谢谢我尝试使用以下格式但无济于事我真的卡在这里:(任何想法 function deleteEvent(EventId){ var confirmDeleteEvent = confirm("你确定要删除这个事件?"); if(confirmDeleteEvent != true) { return false; } else { for(var i = 0; i
    • @JSweete 请在jsfiddle.net 上重现该问题并将链接发送给我。
    【解决方案3】:

    您正在控制$events 对象。你为什么不把它组织起来

    eventObject = {
        "1": {"title":"Sample Event 1\n","start":"Nov 27 2011 10:30:00 GMT+0000 (GMT)","end":"Nov 27 2011 11:30:00 GMT+0000 (GMT)","allDay":false},
        "2": {"title":"Sample Event 2","start":"Nov 28 2011 12:30:00 GMT+0000 (GMT)","end":"Dec 01 2011 12:30:00 GMT+0000 (GMT)","allDay":true},
        "3": {"title":"Sample Event 3\n","start":"Nov 27 2011 11:30:00 GMT+0000 (GMT)","end":"Nov 27 2011 12:30:00 GMT+0000 (GMT)","allDay":false}
    };
    

    而不是eventArray?这样您就可以轻松使用delete eventObject[toRemove]。或者你会遇到排序顺序的问题吗?

    【讨论】:

    • 不幸的是,我使用的日历要求对象以上述格式构造。我有一些如何设法使用上述给定的编码示例,并且我有一些如何让它现在工作,所以非常感谢你的帮助,并感谢所有贡献的人:) p.s.我讨厌 javascript。
    猜你喜欢
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多