Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从json数组中搜索并删除对象_Javascript_Jquery_Arrays_Json - Fatal编程技术网

Javascript 从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

我试图搜索一个对象并从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: "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))您正在使用无效的数据结构您的数据无效。要么是数组,要么是对象,但属性丢失。请您解释一下,数据无效。…@ankur
data
应该是数组(
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);