Javascript 如何根据日期筛选数据?

Javascript 如何根据日期筛选数据?,javascript,Javascript,我有一个数组 var数据=[ {id:1,jobCategoryWithFromDate:“协助../Assistance[有效期为2017-05-01]”, {id:2,jobCategoryWithFromDate:“协助../Assistance[有效期为2018-01-01]”, {id:3,jobCategoryWithFromDate:“协助../Assistance[有效期为2019-01-01]”, {id:4,jobCategoryWithFromDate:“PROF../P

我有一个数组

var数据=[
{id:1,jobCategoryWithFromDate:“协助../Assistance[有效期为2017-05-01]”,
{id:2,jobCategoryWithFromDate:“协助../Assistance[有效期为2018-01-01]”,
{id:3,jobCategoryWithFromDate:“协助../Assistance[有效期为2019-01-01]”,
{id:4,jobCategoryWithFromDate:“PROF../Professional[有效期为2017-05-01]”,
{id:5,jobCategoryWithFromDate:“PROF../Professional[有效期为2018-01-01]”,
{id:6,jobCategoryWithFromDate:“PROF../Professional[有效期为2019-01-01]”,
{id:7,jobCategoryWithFromDate:“SEN../Senior[自2018-01-01有效]”,
{id:8,jobCategoryWithFromDate:“SEN../Senior[自2019-01-01有效]”,
{id:9,jobCategoryWithFromDate:“SEN../Senior[有效期自2017-05-01]”}
];
data.forEach(函数(结果){
console.log(result.jobCategoryWithFromDate);

});假设日期的格式为
YYYY-MM-DD
,您可以从每个元素中提取包含日期的字符串的一部分,并从中创建日期对象

编辑:似乎您想要的是获取每个用户的最后日期,而不仅仅是获取具有最新日期的条目数组,编辑代码片段以匹配它(如果您希望在用户之间进行不同的比较,您可以编辑提取名称的部分正则表达式)

var数据=[
{id:1,jobCategoryWithFromDate:“协助../Assistance[有效期为2017-05-01]”,
{id:2,jobCategoryWithFromDate:“协助../Assistance[有效期为2018-01-01]”,
{id:3,jobCategoryWithFromDate:“协助../Assistance[有效期为2019-01-01]”,
{id:4,jobCategoryWithFromDate:“PROF../Professional[有效期为2017-05-01]”,
{id:5,jobCategoryWithFromDate:“PROF../Professional[有效期为2018-01-01]”,
{id:6,jobCategoryWithFromDate:“PROF../Professional[有效期为2019-01-01]”,
{id:7,jobCategoryWithFromDate:“SEN../Senior[自2018-01-01有效]”,
{id:8,jobCategoryWithFromDate:“SEN../Senior[自2019-01-01有效]”,
{id:9,jobCategoryWithFromDate:“SEN../Senior[有效期自2017-05-01]”,
{id:10,jobCategoryWithFromDate:“Jun../Junior[自2018-01-01有效]”,
{id:11,jobCategoryWithFromDate:“Usr../User[有效期为2019-01-01]”,
{id:12,jobCategoryWithFromDate:“人/经理[有效期自2017-05-01]”}
];
函数提取名称数据(字符串){
返回[string.match(/^\w++/),string.match(/[0-9]+-[0-9]+-[0-9]+-[0-9]+/g)];
}
var结果=数据。减少((最新日期,当前项)=>{
const[user,date]=extractNameNDate(currentItem.jobCategoryWithFromDate);
if(最新日期[用户]){
//比较给定用户的日期
const[storedUser,storedDate]=extractNameNDate(newestDates[user].jobCategoryWithFromDate);
const dateDifference=新日期(storedDate)-新日期(Date);

如果(dateDifference您可以应用正则表达式从字符串
jobCategoryWithFromDate
中提取日期。然后按日期排序,您将在顶部获得最新结果

var data = [
    { id: 1, jobCategoryWithFromDate: "ASSIST.. / Assistance [valid from 2017-05-01]" },
    { id: 2, jobCategoryWithFromDate: "ASSIST.. / Assistance [valid from 2018-01-01]" },
    { id: 3, jobCategoryWithFromDate: "ASSIST.. / Assistance [valid from 2019-01-01]" },
    { id: 4, jobCategoryWithFromDate: "PROF.. / Professional [valid from 2017-05-01]" },
    { id: 5, jobCategoryWithFromDate: "PROF.. / Professional [valid from 2018-01-01]" },
    { id: 6, jobCategoryWithFromDate: "PROF.. / Professional [valid from 2019-01-01]" },
    { id: 7, jobCategoryWithFromDate: "SEN.. / Senior [valid from 2018-01-01]" },
    { id: 8, jobCategoryWithFromDate: "SEN.. / Senior [valid from 2019-01-01]" },
    { id: 9, jobCategoryWithFromDate: "SEN.. / Senior [valid from 2017-05-01]" }
    ];

var result= data.map(d => ({...d, date: d.jobCategoryWithFromDate.match(/(\d{1,4}([.\-/])\d{1,2}([.\-/])\d{1,4})/g)[0]}))..sort((a, b)=> new Date(b.date) - new Date(a.date))

console.log(result)

你可以用一个简单的reduce, 您可以通过存储数组和currentmaxdates来改进reduce,而不是在每次迭代中重新计算时间戳

如果需要更多关于此代码段的解释,请不要犹豫

const数据=[
{id:1,jobCategoryWithFromDate:“协助../Assistance[有效期为2017-05-01]”,
{id:2,jobCategoryWithFromDate:“协助../Assistance[有效期为2018-01-01]”,
{id:3,jobCategoryWithFromDate:“协助../Assistance[有效期为2019-01-01]”,
{id:4,jobCategoryWithFromDate:“PROF../Professional[有效期为2017-05-01]”,
{id:5,jobCategoryWithFromDate:“PROF../Professional[有效期为2018-01-01]”,
{id:6,jobCategoryWithFromDate:“PROF../Professional[有效期为2019-01-01]”,
{id:7,jobCategoryWithFromDate:“SEN../Senior[自2018-01-01有效]”,
{id:8,jobCategoryWithFromDate:“SEN../Senior[自2019-01-01有效]”,
{id:9,jobCategoryWithFromDate:“SEN../Senior[有效期自2017-05-01]”}
];
//函数返回[2017-05-01]中的日期字符串
const getDateFromJobCategory=(jobCategoryWithFromDate)=>jobCategoryWithFromDate.match(/[0-9]+-[0-9]+-[0-9]+/g);
常量filteredData=data.reduce((acc,data)=>{
//获取时间戳中的数据日期
const dataDateString=getDateFromJobCategory(data.jobCategoryWithFromDate);
const dataDateTS=新日期(dataDateString).getTime();
//获取时间戳中的当前最大日期
const currentMaxDate=getDateFromJobCategory(acc[0]);
const currentMaxDateTS=新日期(currentMaxDate).getTime()
返回dataDateTS>currentMaxDateTS?[data.jobCategoryWithFromDate]:dataDateTS==currentMaxDateTS?[…acc,data.jobCategoryWithFromDate]:acc
},[“[有效期自0001-01-01]”];
const finalResult=filteredData.forEach(jobCategoryWithFromDate=>

console.log(jobCategoryWithFromDate))
您可以通过使用正则表达式提取日期来使用简单排序,然后使用递归函数检查是否有多个相同的日期:

var数据=[
{id:1,jobCategoryWithFromDate:“协助../Assistance[有效期为2017-05-01]”,
{id:2,jobCategoryWithFromDate:“协助../Assistance[有效期为2018-01-01]”,
{id:3,jobCategoryWithFromDate:“协助../Assistance[有效期为2019-01-01]”,
{id:4,jobCategoryWithFromDate:“PROF../Professional[有效期为2017-05-01]”,
{id:5,jobCategoryWithFromDate:“PROF../Professional[有效期为2018-01-01]”,
{id:6,jobCategoryWithFromDate:“PROF../Professional[有效期为2019-01-01]”,
{id:7,jobCategoryWithFromDate:“SEN../Senior[自2018-01-01有效]”,
{id:8,jobCategoryWithFromDate:“SEN../Senior[自2019-01-01有效]”,
{id:9,职务类别WI