【问题标题】:Deleteing JSON object from an array creates "undefined" objects从数组中删除 JSON 对象会创建“未定义”对象
【发布时间】:2011-02-24 02:59:33
【问题描述】:

我在使用 JSON 和数组时遇到了一些问题。我一直在搞 JSON 一段时间,并试图通过重构旧的实现在生产中使用一些。我有两个隐藏的文本字段,一个是格式为 [1][2][3] 等的商店 ID,另一个是 [name1][name2][name3] 所以我认为这将是一个很好的练习来了解更多关于JSON 并对其进行重构并使用更易读的对象表示法。

无论如何,我离题了。我遇到的问题很有趣,我发现了如何将 JSON“推送”到数组中,但问题出在我的删除方法中。当我从数组中删除一个对象时,逗号会持续存在,从而创建“未定义”对象。我做错了吗,有没有更好的方法?

向数组中添加了 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); //  
    }
  }
}

感谢您帮我看这个:)

罗伯

【问题讨论】:

    标签: javascript json


    【解决方案1】:

    Delete 是一个用于从对象中删除键的运算符 - 您不应该真正使用它来从数组中删除项目,因为它不会按照您的预期进行。您可以使用 Array 方法(如 splice 或 slice)来操作数组。

    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;
    }
    

    [编辑] 正如评论者所指出的,数组拼接方法正是这项工作的正确工具,但我将把该功能留作参考。 [/编辑]

    【讨论】:

    • 你听说过 Array.slice 吗?这是一个用于从数组中删除元素的本机函数。
    • 使用splice 方法肯定会更容易。
    • 您说“没有用于'从数组中间删除单个数组元素并重新索引剩余元素'的跨浏览器功能”。是的,你提到过:splice。例如:var a = ["a", "b", "c"]; a.splice(1, 1); 将从数组中删除位置 1 ("b") 处的项目。
    【解决方案2】:

    只需使用拼接方法。

    示例

        var data = {
          "result": [{
            "FirstName": "Test1",
            "LastName": "User"
          }, {
            "FirstName": "user",
            "LastName": "user"
          }]
        }
    
    console.log(data.result);
    console.log("------------ deleting -------------");
    delete data.result[1];
    console.log(data.result); // note the "undefined" in the array.
    
    
        data = {
          "result": [{
            "FirstName": "Test1",
            "LastName": "User"
          }, {
            "FirstName": "user",
            "LastName": "user"
          }]
        }
    
    console.log(data.result);
    console.log("------------ slicing -------------");
    var deletedItem = data.result.splice(1,1);
    console.log(data.result); // here no problem with undefined.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-25
      • 1970-01-01
      • 1970-01-01
      • 2023-02-15
      • 1970-01-01
      • 2018-02-16
      相关资源
      最近更新 更多