fork download
  1. // your code goes here
  2.  
  3.  
  4. function Person(name, gender, maritalStatus) {
  5. this.name = name;
  6. this.gender = gender;
  7. this.maritalStatus = maritalStatus;
  8. }
  9.  
  10. const maleCriteria = {
  11. filter: (people) => people.filter(person => person.gender === 'Male')
  12. };
  13.  
  14. const singleCriteria = {
  15. filter: (people) => people.filter(person => person.maritalStatus === 'Single')
  16. };
  17.  
  18. const andCriteria = (criteria1, criteria2) => ({
  19. filter: (people) => criteria2.filter(criteria1.filter(people))
  20. });
  21.  
  22. const orCriteria = (criteria1, criteria2) => ({
  23. filter: (people) => {
  24. const firstFiltered = criteria1.filter(people);
  25. const secondFiltered = criteria2.filter(people);
  26. return [...new Set([...firstFiltered, ...secondFiltered])];
  27. }
  28. });
  29.  
  30. const people = [
  31. new Person("Robert", "Male", "Single"),
  32. new Person("John", "Male", "Married"),
  33. new Person("Laura", "Female", "Married"),
  34. new Person("Diana", "Female", "Single")
  35. ];
  36.  
  37. const singleMaleCriteria = andCriteria(maleCriteria, singleCriteria);
  38. const singleMales = singleMaleCriteria.filter(people);
  39.  
  40. console.log(JSON.stringify(singleMales));
  41. // Expected output: [ Person { name: 'Robert', gender: 'Male', maritalStatus: 'Single' } ]
Success #stdin #stdout 0.04s 16604KB
stdin
Standard input is empty
stdout
[{"name":"Robert","gender":"Male","maritalStatus":"Single"}]