首页 > 解决方案 > 如何在javascript中将对象数组过滤为另一个对象数组?

问题描述

我有两个对象数组。我想根据 PermissionObj 过滤数据。

这是来自数据库。这是 permissionObj 中的子数组数组。

    const PermissionObj = {
     permission: [{
       "books": [{
        "label": "Can View",
        "value": "can_view"
       }]
      },
      {
       "Journals": [{
         "label": "Can View",
         "value": "can_view"
        },
        {
         "label": "Can Create",
         "value": "can_create"
        },
       ]
      },
      {
       "deal": [{
         "label": "Can update",
         "value": "can_update"
        },
        {
         "label": "Can delete",
         "value": "can_delete"
        },
       ]
      }
     ]
    }

这是静态数据。我想根据 PermissionObj 比较这些数据。

const data = [{
  label: "books",
  value: "can_view"
 },
 {
  label: "deal",
  content: [{

   value: "can_update"
  }, {
   value: "can_delete"
  },{value:"can_view"}]
 },
 {
  label: "Articles",

 },
 {
  label: "Journals",
  content: [{
    value: "can_create"
   },
   {
    value: "can_view"
   },
  {
    value: "can_delete"
   },
 {
    value: "can_edit"
   },

  ]
 }
]

我正在尝试基于PermissionObj对象数组过滤对象数据数组。这是我的尝试代码。

let permission = PermissionObj.permission 

permission.filter(item=>{
  // I am finding data label by using permission label.

 let dataItem = data.find(index=>item[index.label])

 console.log(dataItem)

})

  // the problem is that I want to filtering based on value .

  // if both of value is true , then show the data . 

如果 PermissionObj 值将与数据值匹配。然后显示数据。
我接受的输出将是这种格式:

const data = [{
  label: "books",
  value: "can_view"
 },
 {
  label: "deal",
  content: [{
   value: "can_update"
  }, {
   value: "can_delete"
  }]
 },
 {
  label: "Journals",
  content: [{
    value: "can_create"
   },
   {
    value: "can_view"
   },


  ]
 }
]

标签: javascriptarraysnode.jsreactjsobject

解决方案


所以你可以得到keys数组permission,这会给你一个键数组。因为你keys在一个对象数组中得到一个项目,所以它key总是第一个项目,那么你可以用那个键检查每个数据项

const PermissionObj = {
    permission: [
      {
        books: [
          {
            label: "Can View",
            value: "can_view"
          }
        ]
      },
      {
        Journals: [
          {
            label: "Can View",
            value: "can_view"
          },
          {
            label: "Can Create",
            value: "can_create"
          }
        ]
      },
      {
        deal: [
          {
            label: "Can update",
            value: "can_update"
          },
          {
            label: "Can delete",
            value: "can_delete"
          }
        ]
      }
    ]
  };

  const data = [
    {
      label: "books",
      value: "can_view"
    },
    {
      label: "deal",
      content: [
        {
          value: "can_update"
        },
        {
          value: "can_delete"
        }
      ]
    },
    {
      label: "Articles"
    },
    {
      label: "Journals",
      content: [
        {
          value: "can_create"
        },
        {
          value: "can_view"
        }
      ]
    }
  ];
  
    let permission = PermissionObj.permission;
    let NewData = [];
    permission.filter(item => {
      let ObjectKeys = Object.keys(item);
      let ObjKey = ObjectKeys[0];
      let DATA = data.find(
        dataItem => dataItem.label.toString() === ObjKey.toString()
      );
      NewData.push(DATA);
    });
    console.log(NewData);


推荐阅读