我在JSON和数组方面遇到了一些问题。我一直在弄乱JSON一段时间,并试图通过重构旧的实现在生产中使用一些JSON。我所拥有的是两个隐藏的文本字段,其中一个商店ID的格式为[1] [2] [3]等,另一个名称为[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); //
    }
  }
}

谢谢你帮我看这个:)

最佳答案

Delete是用于从对象中删除键的运算符-您不应该真正使用它来从Array中删除项目,因为它不会执行您期望的操作。您可以使用诸如splice或slice的Array方法来操纵数组。

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 splice方法正是这项工作的正确工具,但我将保留该函数以供引用。
[/编辑]

10-05 22:47
查看更多