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

Javascript 从数组中删除JSON对象将创建;“未定义”;物体,javascript,json,Javascript,Json,我在JSON和数组方面遇到了一些问题。我在JSON上混了一段时间,试图通过重构一个旧的实现在生产中使用一些JSON。我有两个隐藏的文本字段,一个是[1][2][3]等格式的存储ID,另一个是[name1][name2][name3],因此我认为这将是一个很好的练习,可以了解更多关于JSON的信息,并对其进行重构,使用更可读的对象表示法 无论如何,我离题了。我遇到的问题很有趣,我发现了如何将JSON“推”到数组中,但问题出现在我的delete方法中。当我从数组中删除一个对象时,逗号将保留,从而创建

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

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

在数组中添加了2个项目(全部可用)

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

将另一项添加回数组,逗号现在会导致“未定义”对象

[{
  id: "1",
  name: "Test (ID: 1)",
  status: "new"
}, , {
  id: "2",
  name: "Test 2 (ID: 2)",
  status: "new"
}]
这是我的删除功能

[{
  id: "1",
  name: "Test (ID: 1)",
  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); //  
    }
  }
}
函数removeFromList(Id){
var txtIDs=$(“#”)的值;
var data=eval(txtIDs.val());
对于(变量i=0;i
谢谢你帮我看这个:)


Rob

Delete是一个用于从对象中删除键的操作符-您不应该真正使用它从数组中删除项,因为它不会执行您期望的操作。可以使用诸如“拼接”或“切片”之类的阵列方法来操纵阵列

这将很有帮助:)

或者,您可以使用如下函数:

function removeArrayEl(arr, index){
    newArr = [];
    for(var i = 0, l = arr.length;i < l; i++){
        if(i != index){
            newArr.push(arr[i]);
        }
    }
    return newArr;
}
函数removeArrayEl(arr,索引){
newArr=[];
对于(变量i=0,l=arr.length;i

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

您听说过Array.slice吗?这是一个用于从数组中删除元素的本机函数。使用
splice
方法肯定会更简单。您可以说“没有跨浏览器函数用于“从数组中间删除单个数组元素,重新索引其余元素”。是的,你提到过:
splice
。例如:
vara=[“a”、“b”、“c”];a、 拼接(1,1)将从数组中删除位置1(“b”)处的项。
function removeArrayEl(arr, index){
    newArr = [];
    for(var i = 0, l = arr.length;i < l; i++){
        if(i != index){
            newArr.push(arr[i]);
        }
    }
    return newArr;
}