Javascript 按日期筛选对象数组,该日期为>;现在就开始

Javascript 按日期筛选对象数组,该日期为>;现在就开始,javascript,arrays,date,object,ecmascript-6,Javascript,Arrays,Date,Object,Ecmascript 6,我在使用箭头函数和按日期值过滤对象数组时遇到一些问题 我试图对它进行筛选,但它返回完整数组,不能正常工作 最后,我必须返回项目-数组中过期日期大于今天的对象。它必须是箭头函数 const menuItems = [{ name: 'Hamburger', expirationDate: '09-24-2019' }, { name: 'Chicken', expirationDate: '10-03-2019' }, { name: 'Ho

我在使用箭头函数和按日期值过滤对象数组时遇到一些问题

我试图对它进行筛选,但它返回完整数组,不能正常工作

最后,我必须返回项目-数组中过期日期大于今天的对象。它必须是箭头函数

const menuItems = [{
    name: 'Hamburger',
    expirationDate: '09-24-2019'
  },
  {
    name: 'Chicken',
    expirationDate: '10-03-2019'
  },
  {
    name: 'Hot-Dog',
    expirationDate: '03-24-2019'
  },
];

let today = new Date();
let dd = today.getDate();
let mm = today.getMonth();
let yyyy = today.getFullYear();
if (dd < 10) {
  dd = '0' + dd;
}

if (mm < 10) {
  mm = '0' + mm;
}
today = mm + '-' + dd + '-' + yyyy;

console.log(today);

const filterByExpiration = (items) => {
  menuItems.filter(function() {
    return items.expirationDate > today;
  })
};
const menuItems=[{
名称:“汉堡包”,
到期日期:2019年9月24日
},
{
名字:'鸡',
到期日期:2019年3月10日
},
{
名称:'热狗',
到期日期:2019年3月24日
},
];
让今天=新日期();
让dd=today.getDate();
让mm=today.getMonth();
让yyy=today.getFullYear();
如果(dd<10){
dd='0'+dd;
}
如果(毫米<10){
毫米='0'+毫米;
}
今天=mm+'-'+dd+'-'+yyyy;
console.log(今天);
常量过滤器扩展=(项目)=>{
menuItems.filter(函数(){
return items.expirationDate>今天;
})
};
阅读更多关于

对于较旧的浏览器 您可以使用Date.parse(Date)获取传递数据的时间戳,并在与当前日期的差异为负值时对其进行过滤。 您的代码应该是这样的:

const menuItems = [
  {
    name: 'Hamburger',
    expirationDate: '09-24-2019'
  },
  {
    name: 'Chicken',
    expirationDate: '10-03-2019'
  },
  {
    name: 'Hot-Dog',
    expirationDate: '03-24-2019'
  },
];

function filterByExpiration (items) {
  let today = new Date();
  let dd = today.getDate();
  let mm = today.getMonth();
  let yyyy = today.getFullYear();
  if (dd < 10) {
    dd = '0' + dd;
  }
  if (mm < 10) {
    mm = '0' + mm;
  }
  today = mm + '-' + dd + '-' + yyyy;
  return menuItems.filter((item) => item.expirationDate > today)
};
const menuItems=[
{
名称:“汉堡包”,
到期日期:2019年9月24日
},
{
名字:'鸡',
到期日期:2019年3月10日
},
{
名称:'热狗',
到期日期:2019年3月24日
},
];
功能过滤器支出(项目){
让今天=新日期();
让dd=today.getDate();
让mm=today.getMonth();
让yyy=today.getFullYear();
如果(dd<10){
dd='0'+dd;
}
如果(毫米<10){
毫米='0'+毫米;
}
今天=mm+'-'+dd+'-'+yyyy;
return menuItems.filter((item)=>item.expirationDate>today)
};

您正在比较两个不同的字符串。最好是转换时间戳中的日期对象或任何可以比较的值

new Date(); //gives something like this Wed Jun 26 2019 02:55:59 GMT+0530
你正试着将其与“03-24-2019”进行比较。可能的流量为:

const menuItems = [{
    name: 'Hamburger',
    expirationDate: '09-24-2019'
  },
  {
    name: 'Chicken',
    expirationDate: '10-03-2019'
  },
  {
    name: 'Hot-Dog',
    expirationDate: '03-24-2019'
  },
];
const today = new Date().getTime();
const filterByExpiration = menuItems.filter((items)  => {
    return new Date(items.expirationDate).getTime() > today;
  })
console.log(filterByExpiration)

这是在进行词典比较,而不是你想要的。只需将两个
Date
s一起进行比较,使用箭头函数意味着您还可以得到一个隐式返回

const menuItems=[{name:'Hamburger',过期日期:'09-24-2019'},{name:'Pizza',过期日期:'03-11-2019'},{name:'Sushi',过期日期:'03-21-2019'},{name:'Chicken',过期日期:'10-03-2019'},{name:'Steak',过期日期:'05-27-2019,{name:'Hot-Dog',过期日期:'03-24-2019}];
const today=新日期();
const filterbyexpatition=arr=>arr.filter(({expirationDate})=>新日期(expirationDate.replace(/-/g,“/”)>今天);
console.log(filterbyexportation(menuItems))

.as console wrapper{max height:100%!important;top:auto;}
您正在比较字符串,并希望JS引擎理解您希望它们被视为日期对象。考虑使用库来进行这些类型的比较:这在某些浏览器中不起作用。请参阅“@str在编辑的代码中什么不起作用?”
新日期('09-24-2019')
=>
无效日期
@str到我必须按月比较
Date.getMonth()+1
和day by
Date.getDate()
和year by
Date.getFullYear()
用于旧浏览器的功能存在严重缺陷(使用“older”的唯一原因是使用const,这是不必要的)。使用内置解析器解析字符串不是一个好主意,尤其是当字符串不是ECMA-262支持的格式时。这在某些浏览器中不起作用。请参阅?更新,现在应该是精细的,它以字典形式比较字符串,而不是日期,并且使用的格式不能正确比较字符串,例如
'06-20-2019'>'07-01-2018'
返回false,但如果与日期进行比较,则应为true。但是,转换为YYYY-MM-DD将起作用。这在某些浏览器中不起作用。请参阅?并且已经有三个类似的非工作答案。分解是一个很好的方法,但不是很明显。也许您可以添加脚注?没问题@msg,我将添加一个ES5变体。使用内置日期解析器不是一个好主意,尤其是对于ECMA-262不支持的格式。
new Date(); //gives something like this Wed Jun 26 2019 02:55:59 GMT+0530
const menuItems = [{
    name: 'Hamburger',
    expirationDate: '09-24-2019'
  },
  {
    name: 'Chicken',
    expirationDate: '10-03-2019'
  },
  {
    name: 'Hot-Dog',
    expirationDate: '03-24-2019'
  },
];
const today = new Date().getTime();
const filterByExpiration = menuItems.filter((items)  => {
    return new Date(items.expirationDate).getTime() > today;
  })
console.log(filterByExpiration)