【问题标题】:How to check if a javascript array of objects has every single property listed? [closed]如何检查一个javascript对象数组是否列出了每个属性? [关闭]
【发布时间】:2019-12-23 23:35:44
【问题描述】:

您好,我正在尝试创建一个函数来检查对象中的每个属性,以查看它是否列出了所有属性。

例如我想搜索下面的对象

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

我想知道如何构建一个函数来丢弃那些不匹配的函数 ALL 下面列出的属性

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

在exampleObj的第二个对象中,它只包含“a”而不包含“b”,所以它不计算所以它丢弃它;第三个对象也是如此。只有 exampleObj 中的第一个对象通过,因为它具有两个属性; “a”和“b”。如果有意义的话,我还希望这个函数在搜索对象时能够处理的不仅仅是“a”和“b”。

我应该怎么做才能实现这一目标?谢谢。

编辑:我在第三个对象上犯了一个错误,因为有人对此发表了评论。现在改正了

【问题讨论】:

  • 过滤器,其中任何 hasAllProps 值都不作为键存在
  • 第三个对象有一个 a 和一个 b?
  • 到目前为止你尝试过什么?请“展示你的作品”并提供minimal reproducible example

标签: javascript arrays algorithm object properties


【解决方案1】:

您可以将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)

【讨论】:

    【解决方案2】:

    您可以使用过滤器来判断是否存在a 属性和b 属性。

    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);

    【讨论】:

    • 这对于值为 false 的对象失败,例如:{"a": 1, "P": 2, "b": 0},因为 v[prop] 的计算结果为 false。
    • 我想应该是这样的。它包括 a 但不包括 b。
    • 但它仍然有一个b 属性。
    • 你复制错了。 {"a": 1, "P": 2, "c": 3}
    猜你喜欢
    • 2021-12-21
    • 2021-06-03
    • 2018-06-09
    • 1970-01-01
    • 2021-12-26
    • 2021-03-09
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    相关资源
    最近更新 更多