Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.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对象作为筛选条件?_Javascript - Fatal编程技术网

如何使用JavaScript对象作为筛选条件?

如何使用JavaScript对象作为筛选条件?,javascript,Javascript,我有一个对象,用于存储项目之间关系的详细信息,如下所示: var allLinks = [ { source: { itemname: "Hello World", index: 0 }, target: { itemname: "Do Stuff", index: 1 } }, { source: { itemname: "Do Stuff", index: 1 }, target: { itemname: "Hello World", index:

我有一个对象,用于存储项目之间关系的详细信息,如下所示:

var allLinks = [
  {
    source: { itemname: "Hello World", index: 0 },
    target: { itemname: "Do Stuff", index: 1 }
  },
  {
    source: { itemname: "Do Stuff", index: 1 },
    target: { itemname: "Hello World", index: 0 }
  },
  {
    source: { itemname: "Do Things", index: 2 },
    target: { itemname: "Hello World", index: 0 }
  },
  {
    source: { itemname: "Hello World", index: 0 },
    target: { itemname: "Do Things", index: 2 }
  }
];
linksToRemove.map((li) => {
  allLinks.filter((item) => item.index !== li.index);
})
我想做的是开发一个函数,从对象中删除所有关系,其中涉及正在被删除/删除的项(作为
目标
)。我创建了一个函数,用于收集需要在数组中删除的关系(
节点
表示要删除/删除的项):

这将产生如下输出:

var linksToRemove = [
  {
    source: { itemname: "Hello World", index: 0 },
    target: { itemname: "Do Stuff", index: 1 }
  },
  {
    source: { itemname: "Do Stuff", index: 1 },
    target: { itemname: "Hello World", index: 0 }
  }
];
因此,我尝试使用该输出来过滤
allLinks
对象,如下所示:

var allLinks = [
  {
    source: { itemname: "Hello World", index: 0 },
    target: { itemname: "Do Stuff", index: 1 }
  },
  {
    source: { itemname: "Do Stuff", index: 1 },
    target: { itemname: "Hello World", index: 0 }
  },
  {
    source: { itemname: "Do Things", index: 2 },
    target: { itemname: "Hello World", index: 0 }
  },
  {
    source: { itemname: "Hello World", index: 0 },
    target: { itemname: "Do Things", index: 2 }
  }
];
linksToRemove.map((li) => {
  allLinks.filter((item) => item.index !== li.index);
})
问题在于,此方法似乎删除了关系内容,但维护了使用
未定义的
内容索引的项。我是否遗漏了
过滤器
的工作原理,或者我做错了什么,是否有其他解释

var allLinks=[{
资料来源:{
项目名称:“你好,世界”,
索引:0
},
目标:{
itemname:“做事”,
索引:1
}
},
{
资料来源:{
itemname:“做事”,
索引:1
},
目标:{
项目名称:“你好,世界”,
索引:0
}
},
{
资料来源:{
itemname:“做事”,
索引:2
},
目标:{
项目名称:“你好,世界”,
索引:0
}
},
{
资料来源:{
项目名称:“你好,世界”,
索引:0
},
目标:{
itemname:“做事”,
索引:2
}
}
];
var linksToRemove=[{
资料来源:{
项目名称:“你好,世界”,
索引:0
},
目标:{
itemname:“做事”,
索引:1
}
},
{
资料来源:{
itemname:“做事”,
索引:1
},
目标:{
项目名称:“你好,世界”,
索引:0
}
}
];
const result=allLinks.filter(x=>!linksToRemove.some(y=>
y、 source.index==x.source.index&&y.target.index==x.target.index))

console.log('result',result)
根据@AluanHaddad对原始帖子的评论回答我自己的问题以提高可见性。我需要重新分配
allLinks
数组,因为
filter
不会对其进行变异(它会创建一个新数组)


您可能会发现,您不需要
linksToRemove
,也不需要更改
allLinks
。您可能只需要
过滤器

注意:如果您想将
allLinks
作为函数调用的一部分进行更新,可以在
allLinks.filter(…)
前面拍打
allLinks=

让allLinks=getData();
函数删除(节点){
返回allLinks.filter(项=>)[
item.source.index,
item.target.index
].包括(节点索引))
}
log(删除({index:1}))
/********************************************************/
函数getData(){
返回[{
资料来源:{
项目名称:“你好,世界”,
索引:0
},
目标:{
itemname:“做事”,
索引:1
}
},
{
资料来源:{
itemname:“做事”,
索引:1
},
目标:{
项目名称:“你好,世界”,
索引:0
}
},
{
资料来源:{
itemname:“做事”,
索引:2
},
目标:{
项目名称:“你好,世界”,
索引:0
}
},
{
资料来源:{
项目名称:“你好,世界”,
索引:0
},
目标:{
itemname:“做事”,
索引:2
}
}
];

}
过滤器不会改变数组,而是创建一个新的数组。你需要重新分配<代码>as=as.过滤器(f)同时,
allLinks.filter((item)=>item.index!==li.index)
没有多大意义>
li
是一个没有键
索引的对象。它只包含
目标
对象,而目标又包含
索引
键。你能告诉我们你的
节点的样子吗?我有一种感觉,这可以很容易地在一次通过完成。@AluanHaddad修复了它…比我想象的简单!我经常这样想。顺便说一句,如果你没有从map回调返回任何东西,你应该使用forEach而不是map。这太棒了,我以前没有想过像这样使用
。includes
。对于其他可能看到这一点的人,我正在使用
react
useState
钩子,以便更新
allLinks
作为函数调用的一部分,我只是将
allLinks.filter(…)
放在我的
setState
函数中。