如何检查一个包含对象的Javascript数组是否具有列出的每个属性?

3

你好,我试图创建一个函数,以检查对象中的每个属性是否都具备列出的所有属性。

例如,我想搜索下面的对象:

var exampleObj = [{"a": 1, "b": 2, "c": 3}, {"a": 1, "Z": 2, "c": 3}, {"a": 1, "P": 2, "c": 3}];

我想知道如何建立一个函数来丢弃不符合以下所有属性的内容:

var hasAllProps = ["a", "b"];

在exampleObj的第二个对象中,它仅包含"a"而不是"b",因此被丢弃;第三个对象也是如此。只有exampleObj中的第一个对象通过了,因为它具有两个属性:"a"和"b"。当搜索对象时,我还希望此函数能处理更多不仅仅是"a"和"b"的情况。要达到这个目的,我应该怎么做?谢谢。
编辑:我在第三个对象上犯了一个错误,如有评论,请纠正。

筛选,其中任何属性都不存在作为键的 hasAllProps 值 - Taplar
第三个对象有一个a和一个b? - Yousername
1
你目前尝试了什么?请“展示你的工作”,并提供一个[MCVE]。 - Shaggy
2个回答

4
你可以将exampleObj上的filter()lProps上的every()结合使用:

var exampleObj = [{"a": 1, "b": 2, "c": 3}, {"a": 1, "Z": 2, "c": 3}, {"a": 1, "b": 2, "P": 3}];

var lProps = ["a", "b"];

let filtered = exampleObj.filter(obj => lProps.every(prop => prop in obj))

console.log(filtered)


0

您可以使用筛选器来确定是否存在属性 ab

var exampleObj = [{"a": 1, "b": 2, "c": 3}, {"a": 1, "Z": 2, "c": 3}, {"a": 1, "P": 2, "c": 3}];

var hasAllProps = ["a", "b"];

var filtered = exampleObj.filter(v => hasAllProps.every(prop => v[prop]));

console.log(filtered);


1
这种方法对于值为falsey的对象会失败,例如:{"a": 1, "P": 2, "b": 0},因为v[prop]的值为false。 - Mark
应该是这样的,我想。它包括a但不包括b。 - Yousername
但它仍然具有 b 属性。 - Mark
你把它复制错了。{"a": 1, "P": 2, "c": 3} - Yousername

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接