【问题标题】:Loop through array of nested objects and filter truthy objects遍历嵌套对象数组并过滤真实对象
【发布时间】:2023-01-25 03:48:30
【问题描述】:

我有一个对象数组

[
  {
    id: 1,
    name: "dashboard",
    permissions: {
      view: {
        default_checked: false,
        custom_checked: true,
      },
      add: {
        default_checked: false,
        custom_checked: true,
      },
    },
  },
  {
    id: 2,
    name: "user",
    permissions: {
      view: {
        default_checked: false,
        custom_checked: true,
      },
      add: {
        default_checked: false,
        custom_checked: false,
      },
    },
  },
  {
    id: 3,
    name: "contact",
    permissions: {
      view: {
        default_checked: false,
        custom_checked: false,
      },
      add: {
        default_checked: false,
        custom_checked: false,
      },
    },
  },
]

我想做的是筛选只有在权限对象内部具有 custom_checked: true 的对象并删除其他虚假(查看、添加)对象,因此输出将是

[
  {
    id: 1,
    name: "dashboard",
    permissions: {
      view: {
        custom_checked: true,
      },
      add: {
        custom_checked: true,
      },
    },
  },
  {
    id: 2,
    name: "user",
    permissions: {
      view: {
        custom_checked: true,
      },
    },
  },
]

我努力了

const testArr = [];

arr.forEach((v) => {
  for (let [key, value] of Object.entries(v.permissions)) {
    if (value.custom_checked) {
      testArr.push({
        ...v,
        permissions: {
          [key]: {
            custom_checked: true,
          },
        },
      });
    }
  }
});

console.log(testArr);

但我认为,由于我在内部遍历 v.permissions 对象,所以输出是一个一个地分离和获取对象。我该如何解决这个问题?

【问题讨论】:

    标签: javascript


    【解决方案1】:
    const resArr = array.map(item => {
      if(!item.permissions.view.custom_checked) delete item.permissions.view
      if(!item.permissions.add.custom_checked) delete item.permissions.add
      if(!item.permissions) delete item.permissions
    }).filiter(item => !!item.permissions)
    

    【讨论】:

    • 我写的伪代码。没有测试但你明白了:)
    • .map 不返回任何对象。
    猜你喜欢
    • 2020-07-25
    • 2022-01-14
    • 2018-05-20
    • 2018-08-28
    • 1970-01-01
    • 2020-03-11
    • 1970-01-01
    • 2015-11-24
    • 2011-04-10
    相关资源
    最近更新 更多