Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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_Reactjs - Fatal编程技术网

Javascript 比较字符串数组与对象数组并删除

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; } }); }

正在处理React应用程序,并将this.state.filesAccepted作为对象数组。看起来是这样的:

我还有一个名为filename的字符串数组,如下所示:

_.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我在下面的评论中解释了你的答案:并非所有浏览器都支持它