我如何从数组中删除结束日期 属性 高于当前所选月份的员工?

How can i remove employees from the array that have endDate property higher than current selected month?

数据来自 Google 工作表 API,因此 employees.stratdateemployees.enddate

我需要能够仅显示过去在选定月份工作的员工。如果他们不再工作,但曾经工作过,则应列出他们,如果他们在选定的月份之前停止工作,则不应列出。

有 2 张: a) 一个有两列年和一个月 -->

2011 年 3 月 -> 报告 b) 另一个包含日期为:

03-24-2011 -> 员工 [开始日期和结束日期格式如下]

这就是为什么愚蠢的格式化尝试...

const {employees, reports} = this.props;  

   const monthsFormated = reports.map(item => {return item.month});
   const yearsFormated = reports.map(item => {return item.year});

   const employeeStart = employees.map(item => {return item.startdate});
   const employeeEnd = employees.map(item => {return item.enddate});

   const monthNamesToNumbers = () => {
       let extraFormatting = [];
       for (let i=0; i<monthsFormated.length; i++) {
        extraFormatting.push(moment().month(monthsFormated[i]).format("M"));
       }
       return extraFormatting;
    }   

    // FROMATING DATES COMING FROM EMPLOYEES-TEMPLATE    
    let finalReportsFormatting = _.zip(yearsFormated, monthNamesToNumbers())
    .map((value) => {
    let test;
    return test = (value[1] + '-' + value[0])
    });


    let employeeArr = employees.map(item => {
        return moment(item.startdate).format('M-YYYY')
     })         

    let newArr = Array.from(finalReportsFormatting).map(item => {
        return item
    })

    let testArr = [];

    for (var i = 0; i < employeeArr.length; i++) {
        for (var j = 0; j < newArr.length; j++) {
            if (employeeArr[i] === newArr[j]) {
                testArr.push(newArr[j])
              }
            }    
        }

        const result = [];
            employees.forEach(emp => {
                if (testArr.some(item => moment(emp.startdate).format('M-YYYY') == item) &&
                    testArr.some(item => (moment(emp.enddate).format('M-YYYY') > item))) {
                    result.push(emp);
                }
            });

提前致谢:)

如何简单地添加在第一个循环中对应的员工:

employees.forEach(emp => {
    if (testArr.some(item => moment(emp.startdate).format('M-YYYY') == item) &&
      testArr.some(item => (moment(emp.enddate).format('M-YYYY') > item))) {
        result.push(emp);
    }
});

希望对你有所帮助,

javascript 数组中有一个方法可以帮助您。作为 MAP,迭代数组中的每个项目,退出数组方法 filter

在最后一次迭代中,您应该使用 filter 和 map 而不是 forEach

像这样:

var filteredEmployees = employees.filter(function(){
   // your filter here
}).map(...);

您可以在不同的函数中分离回调,使您的代码更简单。或者您可以在不同的声明中将过滤器和地图分开。

var filteredEmployees = employees.filter(function(){
   // your filter here
});
var mapEmployees = filteredEmployees.map(...);

也许这段代码不是您要找的,但您的代码肯定更清晰、更易于管理。