【问题标题】:How to filters array of object by array of object in reactjs如何在reactjs中通过对象数组过滤对象数组
【发布时间】:2022-12-12 05:21:45
【问题描述】:

我在通过对象数组过滤对象数组内的数据时遇到问题。我已经尝试将过滤器与 includes 方法结合使用,但返回一个空数组。

假设我有一个名为 listOfPermissions 的数组。

listOfPermissions = [
        {name:'A',IsChecked:true},
        {name:'B',IsChecked:true},
        {name:'C',IsChecked:true}
]

比我想用 permissionOnRole 数组过滤列表

permissionOnRole = [
        {name:'C',IsChecked: true}    
]

我想达到的目标

result = [
    {name:'A',IsChecked:true},
    {name:'B',IsChecked:true},
]

这是我的代码

const setUncheckPermissions = () => {
    const permissionsOnRole = role.permissions.map(it => ({name: it, isChecked: true}))
    const listOfAllPermissions = props.permissions.map((permission) => {return {name: permission['name'], isChecked: true}});


    let result = listOfAllPermissions.filter(item => permissionsOnRole.includes(item));

    console.log(listOfAllPermissions)

}

请帮我解决这个问题先感谢您

【问题讨论】:

  • includes 不起作用,因为对象是通过引用进行比较的,而不是通过嵌套字段进行比较的

标签: javascript reactjs


【解决方案1】:

只需使用filter

const listOfPermissions = [
        {name:'A',IsChecked:true},
        {name:'B',IsChecked:true},
        {name:'C',IsChecked:true}
]
const permissionOnRole = [
        {name:'C',IsChecked: true}    
]

const result = listOfPermissions.filter(item => !!permissionOnRole.find(i => i.name !== item.name))

console.log(result)

【讨论】:

  • 这项工作,谢谢,但我仍然困惑为什么我的代码不起作用,可能是因为包含?
  • 是的。由于您的数组是一个对象数组。包括不起作用。它适用于数字或字符串数​​组
猜你喜欢
  • 1970-01-01
  • 2020-01-27
  • 2022-11-27
  • 2019-05-05
  • 1970-01-01
  • 2021-04-23
  • 1970-01-01
  • 1970-01-01
  • 2019-08-22
相关资源
最近更新 更多