检查某个年龄段

Checking Between a Certain Age

我有一个 if 声明,如下所示:

function isMaleBetween(value, index, array) {
        maleBetween = [];

        array.forEach(function (element) {
           if (element.active === filters.active &&
               element.gender === filters.gender &&
               element.age === filters.age.min(18) &&
               element.age === filters.age.max(30)) {
               console.log(element);
           }
        });
    }

这是我的用户所在的class。我检查过所有名称、ID 和过滤器都在此处:

export const UserConfig = {
  test_case_1: {
    getUsers: () => UserConfig.users,
    filters: {
      active: true
    }
  },
  test_case_2: {
    getUsers: () => UserConfig.users,
    filters: {
      active: true,
      gender: 'female'
    }
  },
  test_case_3: {
    getUsers: () => UserConfig.users,
    filters: {
      active: false,
      gender: 'male',
      age: {
        min: 18,
        max: 30
      }
    }
  },
  users:[
    {
      "_id": "597c79908b3baf49d88204db",
      "age": 17,
      "name": "Mack Roach",
      "gender": "male",
      "active": false
    },
    {
      "_id": "597c799049f0cf0a330d58dd",
      "age": 22,
      "name": "Guy Howe",
      "gender": "male",
      "active": true
    },
    {
      "_id": "597c79908e284bdc450a4241",
      "age": 22,
      "name": "Marie Camacho",
      "gender": "female",
      "active": true
    },
    {
      "_id": "597c79906b710574bc79c970",
      "age": 21,
      "name": "Hewitt Buckley",
      "gender": "male",
      "active": true
    },
    {
      "_id": "597c7990ab221a09c6671ff5",
      "age": 19,
      "name": "Jeannine Beard",
      "gender": "female",
      "active": true
    },
    {
      "_id": "597c7990f807c9cb122c52ea",
      "age": 20,
      "name": "Mooney Shepard",
      "gender": "male",
      "active": false
    },
    {
      "_id": "597c7990fe0487381569b455",
      "age": 18,
      "name": "Norman Hardy",
      "gender": "male",
      "active": false
    }
  ]
}

但是,当我 运行 这样做时,它不会遍历我的最少 18 岁和最多 30 岁的男性数组。这个说法是错误的还是我遗漏了什么?

问题是你把它们当作函数来调用。您还需要使用比较运算符。

element.age >= filters.age.min && element.age <= filters.age.max

如果测试用例没有最小值或最大值,要给它们默认值,您可以使用 OR 运算符:

element.age >= (filters.age.min || 18) && element.age <= (filters.age.max || 30)

您可以使用filter

let array=[ { "_id": "597c79908b3baf49d88204db", "age": 17, "name": "Mack Roach", "gender": "male", "active": false }, { "_id": "597c799049f0cf0a330d58dd", "age": 22, "name": "Guy Howe", "gender": "male", "active": true }, { "_id": "597c79908e284bdc450a4241", "age": 32, "name": "Marie Camacho", "gender": "female", "active": true }];
let filtered_array=array.filter(a=>a.age >=18 &&  a.age<=30 && a.gender==='male');

filtered_array.forEach(function (element) {
    console.log(element);
       
    });

如果您尝试使用 declerative 方式选择对象,这是另一个视角。

var ge = UserConfig.users.filter((object)=> object.gender === 'male')
                         .filter((male)=> male.age >= 18 && male.age <= 30)

console.log(ge);

过滤男性,然后过滤年龄。执行到最后的,会放在全新的列表里,你可以登录看看它做了什么。