代码之家  ›  专栏  ›  技术社区  ›  Modika

从数组中删除JSON对象将创建“未定义”对象

  •  4
  • Modika  · 技术社区  · 15 年前

    我在JSON和数组方面遇到了一些问题。我有一段时间一直在处理JSON,并试图通过重构一个旧的实现来在生产中使用一些JSON。我有两个隐藏的文本字段,一个是格式为[1][2][3]的存储ID,另一个是名称[NAME1][NAME2][NAME3],所以我认为这将是一个很好的练习,可以了解更多关于JSON的信息,并将其重构出来,使用更可读的对象符号。

    不管怎样,我离题了。我遇到的问题很有趣,我发现了如何将JSON“推”到数组中,但这个问题出现在我的delete方法中。当我从数组中删除一个对象时,逗号会一直存在,创建“未定义”的对象。我做错了吗?还有更好的方法吗?

    向数组中添加了2个项(全部正确)

    [{id:"1", name:"Test (ID: 1)", status:"new"}, {id:"2", name:"Test 2 (ID: 2)", status:"new"}]
    

    从数组中删除了1个项(保留逗号)

    [{id:"1", name:"Test (ID: 1)", status:"new"}, ,]
    

    将另一项重新添加到数组中,逗号现在导致“未定义”对象

    [{id:"1", name:"Test (ID: 1)", status:"new"}, , {id:"2", name:"Test 2 (ID: 2)", status:"new"}]
    

    这是我的删除功能

        function removeFromList(Id) {
        var txtIDs = $("#<%= selected.ClientID %>");
        var data = eval(txtIDs.val());
    
        for (var i = 0; i < data.length; i++) {
            alert(typeof (data[i]));
            if (typeof(data[i]) != 'undefined') {
                if (data[i].id == Id)
                    delete data[i]; // alert(data[i].name); //  
            }
        }     
    }
    

    谢谢你帮我看这个:)

    抢劫

    1 回复  |  直到 15 年前
        1
  •  1
  •   adamnfish    15 年前

    删除是一个用于从对象中删除键的运算符-您不应该真正使用它从数组中删除项,因为它不会像您期望的那样执行操作。可以使用拼接或切片等数组方法来操作数组。

    这个 MDC Array methods documentation 会有帮助的:)

    或者,您可以使用这样的函数:

    function removeArrayEl(arr, index){
        newArr = [];
        for(var i = 0, l = arr.length;i < l; i++){
            if(i != index){
                newArr.push(arr[i]);
            }
        }
        return newArr;
    }
    

    [编辑] 正如注释者所指出的,数组拼接方法正是执行此任务的正确工具,但我将保留该函数以供参考。 [/编辑]