如何在javascript中计算对象数组中存在的键?

如何在javascript中计算对象数组中存在的键?,javascript,arrays,Javascript,Arrays,我有一个下面的数组。我想知道对象数组中存在多少次selectedOption键。在某些对象中,我们没有键selectedOption。因此,键selectedOption的计数应返回4。如何在javascript中计算这些键 let data = [{ id: 123, selectedOption: "ABC", value: 345 }, { id: 234, selectedOption: "BCD", value: 345 }, { id: 356, se

我有一个下面的数组。我想知道对象数组中存在多少次
selectedOption
键。在某些对象中,我们没有键
selectedOption
。因此,键
selectedOption
的计数应返回4。如何在javascript中计算这些键

let data = [{
  id: 123,
  selectedOption: "ABC",
  value: 345
}, {
  id: 234,
  selectedOption: "BCD",
  value: 345
}, {
  id: 356,
  selectedOption: "BGY",
  value: 678
}, {
  id: 456,
  selectedOption: "BCD",
  value: 890
}, {
  id: 870: value: 980
}, {
  id: 385,
  value: 654
}]

有多种方法可以做到这一点。在下面的函数中,使用reduce。在reduce回调中,它检查对象是否具有
selectedOption
键,然后递增1

let数据=[{
id:123,
选择选项:“ABC”,
价值:345
}, {
id:234,
选择选项:“BCD”,
价值:345
}, {
id:356,
选择选项:“BGY”,
货值:678
}, {
身份证号码:456,
选择选项:“BCD”,
价值:890
}, {
id:870,
价值:980
}, {
身份证号码:385,
价值:654
}];
让countSelectedOption=data.reduce((acc,curr)=>{
acc+=当前选择选项?1:0;
返回acc;
}, 0);

console.log(countSelectedOption)
有多种方法可以实现。在下面的函数中,使用reduce。在reduce回调中,它检查对象是否具有
selectedOption
键,然后递增1

let数据=[{
id:123,
选择选项:“ABC”,
价值:345
}, {
id:234,
选择选项:“BCD”,
价值:345
}, {
id:356,
选择选项:“BGY”,
货值:678
}, {
身份证号码:456,
选择选项:“BCD”,
价值:890
}, {
id:870,
价值:980
}, {
身份证号码:385,
价值:654
}];
让countSelectedOption=data.reduce((acc,curr)=>{
acc+=当前选择选项?1:0;
返回acc;
}, 0);
console.log(countSelectedOption)
data.filter(d=>d.hasOwnProperty('selectedOption'))。长度

data.filter(datum=>datum.selectedOption).length相比,这是一个更全面的验证解决方案,因为如果
selectedOption
是一个带有
false
值的布尔标志,则不会对其进行计数

hasOwnProperty
将检查对象上是否存在该属性,而不考虑其值

例如在这种情况下

let data = [{
  id: 123,
  selectedOption: false,
  value: 345
}, {
  id: 234,
  selectedOption: false,
  value: 345
}, {
  id: 356,
  selectedOption: true,
  value: 678
}, {
  id: 456,
  selectedOption: false,
  value: 890
}, {
  id: 870,
  value: 980
}, {
  id: 385,
  value: 654
}];
  • data.filter(d=>d.hasOwnProperty('selectedOption'))。长度
    输出:
    4

  • data.filter(datum=>datum.selectedOption)。长度
    Output:
    1

  • data.filter(d=>d.hasOwnProperty('selectedOption')).length

    data.filter(datum=>datum.selectedOption).length相比,这是一个更全面的验证解决方案,因为如果
    selectedOption
    是一个带有
    false
    值的布尔标志,则不会对其进行计数

    hasOwnProperty
    将检查对象上是否存在该属性,而不考虑其值

    例如在这种情况下

    let data = [{
      id: 123,
      selectedOption: false,
      value: 345
    }, {
      id: 234,
      selectedOption: false,
      value: 345
    }, {
      id: 356,
      selectedOption: true,
      value: 678
    }, {
      id: 456,
      selectedOption: false,
      value: 890
    }, {
      id: 870,
      value: 980
    }, {
      id: 385,
      value: 654
    }];
    
  • data.filter(d=>d.hasOwnProperty('selectedOption'))。长度
    输出:
    4

  • data.filter(datum=>datum.selectedOption)。长度
    Output:
    1


  • 到目前为止,你是如何独自解决这个问题的?一个带有
    if(typeof…
    的简单循环应该可以完成这项工作。到目前为止,您自己做了哪些尝试来解决这个问题?一个带有
    if(typeof…
    的简单循环应该可以完成这项工作。虽然此代码可以回答问题,但提供有关此代码为什么和/或如何回答问题的附加上下文可以提高其长期价值。@β.εηοτ.βε感谢您的建议,我添加了一个解释。虽然此代码可以回答问题,提供有关此代码为什么和/或如何回答此问题的其他上下文,可以提高其长期价值。@β.εηοιτ.βε感谢您的建议,我添加了一个解释。