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

标签 javascript reactjs

在 React 应用程序上工作并有一个 this.state.filesAccepted,它是一个对象数组。它看起来像这样:

filesAccepeted

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

filenames

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

可能有更有效和更简洁的方法来执行此操作,但为了进行比较,我认为我需要执行如下两个循环:

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

我应该如何处理删除?除了两次 map 之外,还有更有效的方法来进行这种比较吗?

最佳答案

以下应该有效:

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

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

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

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

关于javascript - 将字符串数组与对象数组进行比较并删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50518286/

相关文章:

javascript - 从 Firebase 存储获取的 URL 未显示在 Ionic 3 中的 <ion-img [src]=...> 上

javascript - 如何解析 WCF DataContract 对象创建的 JSON

javascript - v8涡轮风扇产生的代码

reactjs - 删除生产版本中的 html 属性

javascript - 如何通过 refs 访问子组件函数

javascript - 通过 AJAX 提交表单并获取响应

javascript - 如何动态渲染组件列表而不用每次添加新组件都重新渲染整个列表?

javascript - 刷新react页面不会将父状态传递给子状态

javascript - 在 Redux/React 组件中改变 props 值的正确方法是什么?

javascript - `|` 在 Flow 中的这个对象中做什么?