Javascript 从json数组中搜索并删除对象
我试图搜索一个对象并从json数组中删除它 我的json对象数组如下所示Javascript 从json数组中搜索并删除对象,javascript,jquery,arrays,json,Javascript,Jquery,Arrays,Json,我试图搜索一个对象并从json数组中删除它 我的json对象数组如下所示 var data = [{ {id: "1", name: "Snatch", type: "crime"}, {id: "2", name: "Witches of Eastwick", type: "comedy"}, {id: "3", name: "X-Men", type: "action"}, {id: "4", name: "Ordinary People", type: "d
var data = [{
{id: "1", name: "Snatch", type: "crime"},
{id: "2", name: "Witches of Eastwick", type: "comedy"},
{id: "3", name: "X-Men", type: "action"},
{id: "4", name: "Ordinary People", type: "drama"},
{id: "5", name: "Billy Elliot", type: "drama"},
{id: "6", name: "Toy Story", type: "children"}
}];
我试图实现的是如果我有一个Id=1的对象我可以搜索数组并将其与数组匹配,然后将其从数组中删除 我正在尝试下面的代码
function RemoveNode(id)
{
data.forEach(function (emp) {
if(emp.Id == id)
{
delete emp;
}
}
}
我无法让它工作,请建议一种更好的方法来执行此操作更好的方法可能是使用原始阵列删除您不想要的项目
假设数据
实际上是一个对象数组(即,没有您当前问题中的错误)
但是,您也可以使用,这需要知道要删除的项的索引,并且在您发现时,您也可以只使用过滤器
试试看
使用jquery,您可以这样做
function RemoveNode(id)
{
$.each(data,function (key,val) {
if(val.Id == id)
{
delete data[key];
}
}
}
您必须使用从数组中删除,而不是当前迭代 您可以尝试以下方法:
var数据=[
{id:“1”,姓名:“抢夺”,类型:“犯罪”},
{id:“2”,名字:“伊斯特威克女巫”,类型:“喜剧”},
{id:“3”,名字:“X战警”,类型:“行动”},
{id:“4”,名字:“普通人”,类型:“戏剧”},
{id:“5”,名字:“比利·埃利奥特”,类型:“戏剧”},
{id:“6”,名称:“玩具总动员”,类型:“儿童”}
];
data.forEach(函数(emp,索引){
如果(emp.id==1){
删除数据[索引];
}
});
document.write(“+JSON.stringify(data,0,4)+”)
我建议与
var data = [
{id: "1", name: "Snatch", type: "crime"},
{id: "2", name: "Witches of Eastwick", type: "comedy"},
{id: "3", name: "X-Men", type: "action"},
{id: "4", name: "Ordinary People", type: "drama"},
{id: "5", name: "Billy Elliot", type: "drama"},
{id: "6", name: "Toy Story", type: "children"}
];
function RemoveNode(id){
data.forEach(function(e, index){
if(id == e.id){
data.splice(index, 1);
}
})
}
RemoveNode(1);
console.log(data);
var data=[{id:“1”,姓名:“抓捕”,类型:“犯罪”},{id:“2”,姓名:“伊斯特威克女巫”,类型:“喜剧”},{id:“3”,姓名:“X战警”,类型:“动作”},{id:“4”,姓名:“普通人”,类型:“戏剧”},{id:“戏剧”},姓名:“比利·埃利奥特”,类型:“戏剧”},{id:“6”,姓名:“玩具总动员”,类型:“儿童”};
函数del(id){
var指数;
数据部分(函数(a,i){
如果(a.id==id){
指数=i;
返回true;
}
})&数据拼接(索引1);
}
del('1');
document.write(''+JSON.stringify(数据,0,4)+'')代码>将以下代码与forEach
和splice
一起考虑,假设data
是对象数组:
var data = [
{id: "1", name: "Snatch", type: "crime"},
{id: "2", name: "Witches of Eastwick", type: "comedy"},
{id: "3", name: "X-Men", type: "action"},
{id: "4", name: "Ordinary People", type: "drama"},
{id: "5", name: "Billy Elliot", type: "drama"},
{id: "6", name: "Toy Story", type: "children"}
];
function RemoveNode(id){
data.forEach(function(e, index){
if(id == e.id){
data.splice(index, 1);
}
})
}
RemoveNode(1);
console.log(data);
必须将数组分配给对象/json中的键。
然后使用过滤器对每个对象设置条件!
代码:
您使用的数据结构无效,数组需要放在方括号中[]
对于您的情况,最好使用过滤器
功能:
var数据=[
{id:“1”,姓名:“抢夺”,类型:“犯罪”},
{id:“2”,名字:“伊斯特威克女巫”,类型:“喜剧”},
{id:“3”,名字:“X战警”,类型:“行动”},
{id:“4”,名字:“普通人”,类型:“戏剧”},
{id:“5”,名字:“比利·埃利奥特”,类型:“戏剧”},
{id:“6”,名称:“玩具总动员”,类型:“儿童”}
];
函数RemoveNode(id){
返回数据。过滤器(函数(emp){
如果(emp.id==id){
返回false;
}
返回true;
});
}
var newData=RemoveNode(“1”);
write(JSON.stringify(newData,0,4))代码>您正在使用无效的数据结构您的数据无效。要么是数组,要么是对象,但属性丢失。请您解释一下,数据无效。…@ankurdata
应该是数组(var data=[…]
)或者是具有属性的对象(var data={arr:[…]}
)。目前它是一个没有属性名称的对象!在这个答案中根本不需要JQuery!所有的burdon都是$。每个!为什么需要使用jQuery?您不能对数据执行相同的操作。forEach
?如果有多个匹配元素,这将只删除其中一个。您可以直接执行返回emp.id!=id
。寻找@jamice'sanswer@Rajesh是的,我明白了,谢谢。也许我的代码更多地解释了filter方法的逻辑,而不是magic@isvforall如果我想根据id选择一个特定的节点,比如说id=3;它将给我一个对象{id:“3”,名称:“X-Men”,键入:“action”},我可以在它上做一些业务操作,那么我如何才能找到它。@ankur那么我如何才能找到它?找到什么?数组中该对象的索引?@ankur-这与你的问题完全相反!我猜这不是OP想要的。
var data = [
{id: "1", name: "Snatch", type: "crime"},
{id: "2", name: "Witches of Eastwick", type: "comedy"},
{id: "3", name: "X-Men", type: "action"},
{id: "4", name: "Ordinary People", type: "drama"},
{id: "5", name: "Billy Elliot", type: "drama"},
{id: "6", name: "Toy Story", type: "children"}
];
function RemoveNode(id){
data.forEach(function(e, index){
if(id == e.id){
data.splice(index, 1);
}
})
}
RemoveNode(1);
console.log(data);