_Filrer 过滤 JSON 多个条件

_Filrer to filter JSON with multiple condition

[
  {
    "Employee_Id": 252156,
    "Active_Ind": true,
    "EmployeeRoles": [
      {
        "Employee_Role_Id": 1,
        "Employee_Role_Nm": "Tax Prep"
      }
    ]
  },
  {
    "Employee_Id": 252156,
    "Active_Ind": true,
    "EmployeeRoles": [
      {
        "Employee_Role_Id": 1,
        "Employee_Role_Nm": "Tax Prep"
      },
      {
        "Employee_Role_Id": 2,
        "Employee_Role_Nm": "Tax Prep"
      }
    ]
  },
  {
    "Employee_Id": 252156,
    "Active_Ind": true,
    "EmployeeRoles": [
      {
        "Employee_Role_Id": 1,
        "Employee_Role_Nm": "Tax Prep"
      },
      {
        "Employee_Role_Id": 3,
        "Employee_Role_Nm": "Tax Prep"
      }
    ]
  },
  {
    "Employee_Id": 252156,
    "Active_Ind": false,
    "EmployeeRoles": [
      {
        "Employee_Role_Id": 1,
        "Employee_Role_Nm": "Tax Prep"
      },
      {
        "Employee_Role_Id": 2,
        "Employee_Role_Nm": "Tax Prep"
      }
    ]
  }
]

我如何使用 _.filter 过滤条件

1.Employee_Role_Id 1 或 3

2.Active_Ind 为真

var activeEmployee = _.filter(employees, function (employee) {
                return _.some(employee.Employee.EmployeeRoles, { 'Employee_Role_Id': 1 });
            })

;

你可以这样做:

var employees = [{"Employee_Id": 252156,"Active_Ind": true,"EmployeeRoles": [{"Employee_Role_Id": 1,"Employee_Role_Nm": "Tax Prep"}]},{"Employee_Id": 252156,"Active_Ind": true,"EmployeeRoles": [{"Employee_Role_Id": 1,"Employee_Role_Nm": "Tax Prep"},{"Employee_Role_Id": 2,"Employee_Role_Nm": "Tax Prep"}]},{"Employee_Id": 252156,"Active_Ind": true,"EmployeeRoles": [{"Employee_Role_Id": 1,"Employee_Role_Nm": "Tax Prep"},{"Employee_Role_Id": 3,"Employee_Role_Nm": "Tax Prep"}]},{"Employee_Id": 252156,"Active_Ind": false,"EmployeeRoles": [{"Employee_Role_Id": 1,"Employee_Role_Nm": "Tax Prep"},{"Employee_Role_Id": 2,"Employee_Role_Nm": "Tax Prep"}]}],
    activeEmployee = _.filter(employees, function (employee) {
      return employee.Active_Ind && _.some(employee.EmployeeRoles, function(role) {
        return 1 === role.Employee_Role_Id || 3 === role.Employee_Role_Id;
      });
    });

console.log(activeEmployee);
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

您可以将所有 Employee_Role_Id 值与您想要的值相交,而不是 some

var activeEmployee = _.filter(employees, e=>e.Active_Ind
&& _.intersection([1,3],_.pluck(e.EmployeeRoles,'Employee_Role_Id')).length);

let employees = [
  {
    "Employee_Id": 252156,
    "Active_Ind": true,
    "EmployeeRoles": [
      {
        "Employee_Role_Id": 1,
        "Employee_Role_Nm": "Tax Prep"
      }
    ]
  },
  {
    "Employee_Id": 252156,
    "Active_Ind": true,
    "EmployeeRoles": [
      {
        "Employee_Role_Id": 1,
        "Employee_Role_Nm": "Tax Prep"
      },
      {
        "Employee_Role_Id": 2,
        "Employee_Role_Nm": "Tax Prep"
      }
    ]
  },
  {
    "Employee_Id": 252156,
    "Active_Ind": true,
    "EmployeeRoles": [
      {
        "Employee_Role_Id": 1,
        "Employee_Role_Nm": "Tax Prep"
      },
      {
        "Employee_Role_Id": 3,
        "Employee_Role_Nm": "Tax Prep"
      }
    ]
  },
  {
    "Employee_Id": 252156,
    "Active_Ind": false,
    "EmployeeRoles": [
      {
        "Employee_Role_Id": 1,
        "Employee_Role_Nm": "Tax Prep"
      },
      {
        "Employee_Role_Id": 2,
        "Employee_Role_Nm": "Tax Prep"
      }
    ]
  }
];

var activeEmployee = _.filter(employees, e=>e.Active_Ind  && _.intersection([1,3],_.pluck(e.EmployeeRoles,'Employee_Role_Id')).length);

console.log(activeEmployee);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>