【问题标题】:Filter an array of object in javascript在javascript中过滤对象数组
【发布时间】:2016-08-12 18:48:27
【问题描述】:

我已经尝试了两个小时来解决这个问题,并找到了一些与我的问题相关的文章,但我似乎无法让这些建议适用于我的情况。所以希望你能帮忙。

我有一个名为 personArray 的对象数组,有 50,000 个条目,这里有两个示例条目:

[
  { sex: "Male", 
    lastName: "DIXON", 
    firstName: "Esteban", 
    age: 51, 
    isSingle: true
  }, 
  {
    sex: "Female", 
    lastName: "BULLOCK", 
    firstName: "Daniela", 
    age: 58, 
    isSingle: false
  } 
]

我希望能够从这些数据中获取有用的人口统计信息。例如,我想知道在 20 的 age 和 24 isSingle 之间有多少 Male。我该怎么做?

如前所述,我已经阅读了其他相关的答案,但是在这方面相当新,无法将它们翻译成我的特定情况。我不想找到单个对象,或单个对象的属性的单个值。我正在寻找 50 000 个条目中有多少符合上述参数。

【问题讨论】:

  • 编写一个 for 循环,只要满足条件,计数器就会递增。
  • @MikeMcCaughan 这看起来一点也不相似。他想计算所有符合某些条件的对象,而不是搜索特定对象。
  • 从找到一个符合某些条件的对象到找到所有符合某些条件的对象是否有那么大的距离?
  • @Barmar 谢谢,你明白了。

标签: javascript arrays object filter


【解决方案1】:

功能方法:

var count = input.filter(function(item) {
    return item.sex == 'Male' && item.age > 19 && item.age < 25 && item.isSingle;
}).length;

命令式方法:

var count = 0;
input.forEach(function(item) {
    if (item.sex == 'Male' && item.age > 19 && item.age < 25 && item.isSingle) count++;
});

【讨论】:

    【解决方案2】:

    使用Array.prototype.filter。您可以在这里找到详细信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

    var a = [{
      sex: "Male",
      lastName: "DIXON",
      firstName: "Esteban",
      age: 51,
      isSingle: true
    }, {
      sex: "Male",
      lastName: "DOE",
      firstName: "John",
      age: 21,
      isSingle: true
    }, {
      sex: "Female",
      lastName: "BULLOCK",
      firstName: "Daniela",
      age: 58,
      isSingle: false
    }];
    
    a = a.filter(function(el) {
      return el.sex === "Male" && el.age > 20 && el.age < 24 && el.isSingle === true;
    });
    
    console.log(a);
    /* 
    [ { sex: 'Male',
        lastName: 'DOE',
        firstName: 'John',
        age: 21,
        isSingle: true } ]
    */
    

    【讨论】:

    • 我不希望它返回符合我标准的条目,我想知道有多少条目真正符合我的标准。我要一个号码。另外,您建议的方法会破坏原始数组数据吗?
    猜你喜欢
    • 2020-08-27
    • 1970-01-01
    • 2021-04-23
    • 2012-11-15
    • 2016-10-12
    • 2021-07-05
    • 1970-01-01
    • 2018-11-22
    相关资源
    最近更新 更多