将字符串数组与对象数组进行比较并删除

时间:2018-05-24 21:16:56

标签: javascript reactjs

使用React应用程序并拥有一个this.state.filesAccepted对象数组。它看起来像这样:

filesAccepeted

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

filenames

我想比较两者,如果匹配,则应从this.state.filesAccepted中的数组中删除该对象。例如,如果filenames"eicartest1")中的字符串与keyfilesAccepted)中的key: "eicartest1"匹配,则应从数组中删除该对象。< / p>

可能有一种更有效,更清洁的方法,但为了进行比较,我认为我需要做两个循环,如下所示:

_.map(filenames, f => {
    _.map(this.state.filesAccepted, fa => {
        if (f === fa.key) {
            delete entire object from array;
        }
    });
});

我应该如何处理删除?除了map两次之外,是否有更有效的方法进行此比较?

2 个答案:

答案 0 :(得分:2)

您可以使用<div class="container"> <div class="row "> <div class="col-auto bg-success">Lots of text - asdfd adf adf adf akljl;kj adffdaasd kj; jad adsfasdf adsf;kj asdfasdf a sdf adf asdf adf kl;j ;lk j jk;;j ;kl j j;k ;lj ; jklj ;jk ;j ;j ;jk ;j k;k ; ;kjasdfasdfj;k asdfasdf asdfasdf asdf asdfasdfasdf</div> <div class="col bg-warning text-right">pushed to other line</div> </div> <div class="row"> <div class="col-auto bg-success">small amount of text</div> <div class="col bg-warning text-right">same line</div> </div> </div> 删除不匹配的商品

Array.prototype.filter()

答案 1 :(得分:2)

以下内容应该有效:

this.state.filesAccepted.filter(
  file=>!filenames.includes(file.key)
)

这导致一个数组只包含src不在文件名中的项目

要使用新filesAccepted创建新状态,您可以执行以下操作:

this.setState({
  ...this.state,
  filesAccepted:this.state.filesAccepted.filter(
    file=>!filenames.includes(file.key)
  )
})