jQuery删除数组索引

时间:2011-07-08 14:28:58

标签: javascript jquery arrays json

我在jQuery中删除/删除数组中的项目时遇到问题。我在console.log()中运行结果,它显示为一个Object。我创建了一个函数,它返回一个json字符串,然后我解析它,下面是一个例子:

var ret = jQuery.parseJSON($.return_json(data));

它运行良好,但是,我正在运行一个$.each循环,它从该数组/对象中删除项目。

var old = $("element").find("li[rel=item]");
$.each(old, function(index, value) {
    ret.splice($(value).attr("id"), 1);
});

上面,我正在搜索属性为rel = item的元素。相同的元素包含id,它与返回json解析变量的函数的索引相关。

我在谷歌浏览器中运行开发人员工具以查看错误并打印出来:

Uncaught TypeError: Object #<Object> has no method 'splice'

任何指导意见都将不胜感激。感谢。

3 个答案:

答案 0 :(得分:4)

似乎ret实际上并不是一个数组(可能是一个对象(例如:{someName: "someVal"}))。

我也假设您的意思是$(value).attr("id")在上面的对象示例中是someName之类的字符串标识符。如果是这种情况,并且您正在使用对象,并且您确实拥有相应的属性标识符,那么幸运的是,解决方案比splice更容易解决。

尝试:

$("element").find("li[rel=item]").each(function() {
    delete ret[$(this).attr("id")];
});

答案 1 :(得分:3)

splice只是数组的方法,而不是对象。在这种情况下,ret是一个对象,而不是一个数组。

如果您尝试从对象中删除特定元素,可以执行以下操作:

$("element").find("li[rel=item]").each(function(i,v){
   delete ret[v.id];
});

PS。您可以使用.each代替$.each

如果你真的想把对象变成一个数组,你可以简单地遍历它并将元素推入一个数组。

var obj = {"1":"item 1", "2": "item 2", "3": "Item 3"};
var arr = [];
for(i in obj){
  if(obj.hasOwnProperty(i)){
    arr.push(obj[i]);
  }
}

答案 2 :(得分:0)

ret是包含数组的JSON对象,您无法拼接它。您需要在对象中引用您称为数组的任何内容并将其拼接起来。

(如果你发布了定义数组的代码,会有所帮助。)