我遇到了JSON和数组的一些问题。我一直在搞乱JSON一段时间,并试图通过重构旧的实现来使用生产中的一些。我有两个隐藏的文本域,一个商店ID格式[1] [2] [3]等,另一个名称[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); //
}
}
}
感谢您为我看这个:)
罗布
答案 0 :(得分:1)
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方法正是这项工作的正确工具,但我将保留该函数以供参考。 [/编辑]