我在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'
任何指导意见都将不胜感激。感谢。
答案 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];
});
如果你真的想把对象变成一个数组,你可以简单地遍历它并将元素推入一个数组。
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对象,您无法拼接它。您需要在对象中引用您称为数组的任何内容并将其拼接起来。
(如果你发布了定义数组的代码,会有所帮助。)