首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检查javascript中的对象数组和另一个对象数组之间的空数组

如何检查javascript中的对象数组和另一个对象数组之间的空数组
EN

Stack Overflow用户
提问于 2020-03-27 10:54:51
回答 4查看 84关注 0票数 1

我有一个对象和groupKey的权限数组。我想在权限和groupKey之间进行过滤。如果对象的权限数组(属性为空数组[] )数组,则群键(项目、期刊)将被移除。例如,这里有文章和期刊是空的array[]。

代码语言:javascript
复制
let permission = [{
            Book: [{
                label: "Can View",
                value: "can_view"
            } ]
        },
       {
            Test: [{
                label: "Can View",
                value: "can_view"
            } ]
        }, , {
            Articles: []
        } ,{
            Journals: []
        } 
    ]

const groupKey = [    
 {label: "Book", value: "Book"},
 {label: "Test", value: "test"},
 {label: "Articles", value: "Articlefull"},
 {label: "Journals", value: "Journal"},
]

我接受的输出是

代码语言:javascript
复制
 let groupKey = [    
     {label: "Book", value: "Book"},
     {label: "Test", value: "test"},
    ]

我正在使用过滤方法,但我没有找到解决办法。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-03-27 11:20:10

Object.entries中取出项的keyvalue,使用value.length>0检查数组是否为空,然后检查是否存在与键匹配的标签,在array中推送项。

代码语言:javascript
复制
  const permission = [
    {
      Book: [
        {
          label: "Can View",
          value: "can_view"
        }
      ]
    },
    {
      Test: [
        {
          label: "Can View",
          value: "can_view"
        }
      ]
    },
    ,
    {
      Articles: []
    },
    {
      Journals: []
    }
  ];

  const groupKey = [
    { label: "Book", value: "Book" },
    { label: "Test", value: "test" },
    { label: "Articles", value: "Articlefull" },
    { label: "Journals", value: "Journal" }
  ];
  let NewGrpKey = [];
  permission.map(perm => {
    let key = Object.entries(perm)[0][0];
    let value = Object.entries(perm)[0][1];
    value.length > 0 &&
      NewGrpKey.push(
        groupKey.find(GrpItem => {
          return GrpItem.label === key;
        })
      );
  });
  console.log(NewGrpKey);

票数 2
EN

Stack Overflow用户

发布于 2020-03-27 12:10:24

您也可以通过使用filtersome数组原型来完成这一任务。

filter()方法创建一个新数组,其中包含所有通过所提供函数实现的测试的元素。 some()方法测试数组中的至少一个元素是否通过了由提供的函数实现的测试。它返回一个布尔值。

代码语言:javascript
复制
let permission = [
	{
	    Book: [
		{
		    label: "Can View",
		    value: "can_view"
		}
	    ]
	},
	{
	    Test: [
		{
		    label: "Can View",
		    value: "can_view"
		}
	    ]
	},
	{
	    Articles: []
	},
	{
	    Journals: []
	}
];

const groupKey = [
    { label: "Book", value: "Book" },
    { label: "Test", value: "test" },
    { label: "Articles", value: "Articlefull" },
    { label: "Journals", value: "Journal" }
];

const res = groupKey.filter(value => (permission.some(ob => typeof ob[value.label] !== 'undefined' && ob[value.label].length > 0)));
console.log(res);
代码语言:javascript
复制
.as-console-wrapper {
  min-height: 100% !important;
 }

票数 2
EN

Stack Overflow用户

发布于 2020-03-27 12:17:42

我们可以使用reduce方法迭代数组,并检查对象是否包含长度大于0的数组。然后将项目推入结果数组。此外,我们还可以使用地图集合来检查groupKey和O(1)

代码语言:javascript
复制
const keys = new Map(groupKey.map(l => [l.label, l]));
const result = permission.reduce((a, c) => {
    for (let key in c) {
        if (keys.has(key) && c[key].length > 0) {
            a.push(keys.get(key));
        }
    }
    return a;
}, []);

console.log(result);

举个例子:

代码语言:javascript
复制
let permission = [{
   Book: [{ label: "Can View", value: "can_view"
   }]
},
{
   Test: [{ label: "Can View", value: "can_view"
   }]
}, , {
   Articles: []
}, {
   Journals: []
}
]

const groupKey = [
   { label: "Book", value: "Book" },
   { label: "Test", value: "test" },
   { label: "Articles", value: "Articlefull" },
   { label: "Journals", value: "Journal" },
]

const keys = new Map(groupKey.map(l => [l.label, l]));
const result = permission.reduce((a, c) => {
    for (let key in c) {
        if (keys.has(key) && c[key].length > 0) {
            a.push(keys.get(key));
        }
    }
    return a;
}, []);

console.log(result);

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60884567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档