Javascript 比较字符串数组与对象数组并删除
正在处理React应用程序,并将this.state.filesAccepted作为对象数组。看起来是这样的: 我还有一个名为filename的字符串数组,如下所示:Javascript 比较字符串数组与对象数组并删除,javascript,reactjs,Javascript,Reactjs,正在处理React应用程序,并将this.state.filesAccepted作为对象数组。看起来是这样的: 我还有一个名为filename的字符串数组,如下所示: _.map(filenames, f => { _.map(this.state.filesAccepted, fa => { if (f === fa.key) { delete entire object from array; } }); }
_.map(filenames, f => {
_.map(this.state.filesAccepted, fa => {
if (f === fa.key) {
delete entire object from array;
}
});
});
我想比较两者,如果存在匹配项,则应将该对象从this.state.filesAccepted中的数组中删除。例如,如果文件名eicartest1中的字符串与FileAccepted key:eicartest1中的键匹配,则应将该对象从数组中删除
可能有一种更高效、更干净的方法可以做到这一点,但为了进行比较,我认为我需要做如下两个循环:
_.map(filenames, f => {
_.map(this.state.filesAccepted, fa => {
if (f === fa.key) {
delete entire object from array;
}
});
});
我应该如何处理删除?除了两次映射之外,还有更有效的方法进行此比较吗?您可以使用Array.prototype.filter删除不匹配的项
const filesAccepted=this.state.filesAccepted.filterobj=>!\。包括文件名、obj.key;
this.setState{filesAccepted} 您可以使用Array.prototype.filter删除不匹配的项
const filesAccepted=this.state.filesAccepted.filterobj=>!\。包括文件名、obj.key;
this.setState{filesAccepted} 以下方面应起作用:
this.state.filesAccepted.filter(
file=>!filenames.includes(file.key)
)
这将导致一个数组,该数组只包含src不在文件名中的项
要使用接受的新文件创建新状态,可以执行以下操作:
this.setState({
...this.state,
filesAccepted:this.state.filesAccepted.filter(
file=>!filenames.includes(file.key)
)
})
以下方面应起作用:
this.state.filesAccepted.filter(
file=>!filenames.includes(file.key)
)
这将导致一个数组,该数组只包含src不在文件名中的项
要使用接受的新文件创建新状态,可以执行以下操作:
this.setState({
...this.state,
filesAccepted:this.state.filesAccepted.filter(
file=>!filenames.includes(file.key)
)
})
并非所有浏览器都支持Array.prototype.includes,我曾经在IE10或IE11中失败过一次,我将所有出现的内容都替换为389;。includes@ZohaibIjaz这是一个react应用程序,所以我想应该有一个网页包来构建它,以便为过时的浏览器创建正确的构建配置文件。@ZohaibIjaz如果浏览器支持是一个问题,使用indexOf。@HMR我也在使用webback,它是一个create react应用程序,但不知何故它失败了。如果浏览器支持是一个问题,您应该使用polyfills,而不是限制自己使用该语言的过时版本,如果可能的话。并非所有浏览器都支持Array.prototype.includes,我曾经在IE10或IE11中失败过一次,我将所有事件替换为_。includes@ZohaibIjaz这是一个react应用程序,所以我猜有一个网页包在构建它,所以这是为过时的浏览器创建正确的构建配置文件的问题。@ZohaibIjaz如果浏览器支持是一个问题,请使用indexOf。@HMR我也在使用webback,这是一个create react应用程序,但不知何故它失败了如果浏览器支持是一个问题,你应该使用polyfills,而不是局限于使用该语言的过时版本,如果可能的话。@HMR我在下面的评论中解释了你的答案:不是所有人都支持它browsers@HMR我在下面的评论中解释了你的答案:并非所有浏览器都支持它