我如何从数组中删除结束日期 属性 高于当前所选月份的员工?
How can i remove employees from the array that have endDate property higher than current selected month?
数据来自 Google 工作表 API,因此 employees.stratdate
、employees.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(...);
也许这段代码不是您要找的,但您的代码肯定更清晰、更易于管理。
数据来自 Google 工作表 API,因此 employees.stratdate
、employees.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(...);
也许这段代码不是您要找的,但您的代码肯定更清晰、更易于管理。