【问题标题】:I want to filter ages older than 30 years in this array of objects我想在这个对象数组中过滤年龄超过 30 岁
【发布时间】:2020-06-22 07:42:38
【问题描述】:
const people = [
    {firstName: 'Sam', lastName: 'Hughes', DOB: '07/07/1978', department: 'Development', salary: '45000'},
    {firstName: 'Terri', lastName: 'Bishop', DOB: '07/04/1989', department: 'Development', salary: '35000'},
    {firstName: 'Jar', lastName: 'Burke', DOB: '11/01/1985', department: 'Marketing', salary: '38000'},
    {firstName: 'Julio', lastName: 'Miller', DOB: '12/02/1991', department: 'Sales', salary: '40000'},
    {firstName: 'Chester', lastName: 'Flores', DOB: '15/03/1988', department: 'Development', salary: '41000'},
    {firstName: 'Madison', lastName: 'Marshall', DOB: '22/09/1980', department: 'Sales', salary: '32000'},
    {firstName: 'Gabriella', lastName: 'Steward', DOB: '26/08/1994', department: 'Marketing', salary: '46000'},
    {firstName: 'Ava', lastName: 'Pena', DOB: '02/11/1986', department: 'Office Management', salary: '38000'},
]

这是我的代码:

const olderThan30 = people.filter(age => Number(new Date().getFullYear()) - Number(age.DOB) > 30 )

console.log(olderThan30)

【问题讨论】:

  • Number(new Date().getFullYear()) --> 在这里您将获得当前年份。您必须调试您的代码。使用您的计算和布尔测试中的至少一项进行 console.log。

标签: javascript arrays loops object filter


【解决方案1】:

您需要添加日期来检查您的 DOB 字符串的年份以验证年份

const people = [
    {firstName: 'Sam', lastName: 'Hughes', DOB: '07/07/1978', department: 'Development', salary: '45000'},
    {firstName: 'Terri', lastName: 'Bishop', DOB: '07/04/1989', department: 'Development', salary: '35000'},
    {firstName: 'Jar', lastName: 'Burke', DOB: '11/01/1985', department: 'Marketing', salary: '38000'},
    {firstName: 'Julio', lastName: 'Miller', DOB: '12/02/1991', department: 'Sales', salary: '40000'},
    {firstName: 'Chester', lastName: 'Flores', DOB: '15/03/1988', department: 'Development', salary: '41000'},
    {firstName: 'Madison', lastName: 'Marshall', DOB: '22/09/1980', department: 'Sales', salary: '32000'},
    {firstName: 'Gabriella', lastName: 'Steward', DOB: '26/08/1994', department: 'Marketing', salary: '46000'},
    {firstName: 'Ava', lastName: 'Pena', DOB: '02/11/1986', department: 'Office Management', salary: '38000'},
];

const olderThan30 = people.filter(age => Number(new Date().getFullYear()) - Number(new Date(age.DOB).getFullYear()) > 30 );

console.log(olderThan30);

【讨论】:

    【解决方案2】:

    如果我没记错的话,你在这一行有错误:

    const olderThan30 = people.filter(age => Number(new Date().getFullYear()) - Number(age.DOB) > 30 )
    

    您使用new Date() 将其用作实际年龄,但随后您正在使用Number(age.DOB)

    您也可以将对象年龄的日期解析为Date,然后获取两个年份,然后比较它们是否大于 30

    【讨论】:

    • DOB,出生日期是一个字符串,正如您在人们中向我们展示的那样。如果您使用此字符串将其与对象日期一起解析,并且您拥有 NOW 对象日期,则比较两个日期会更容易
    【解决方案3】:

    您可以通过以下方式获得准确的结果...

    const olderThan30 = people.filter(age => (new Date() - new Date(age.DOB) ) > (new Date('1/1/2030') - new Date('1/1/2000') )) 
    

    【讨论】:

    • 好的,但是不需要实现 .getFullYear() 因为 DOB 的格式是年份
    猜你喜欢
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 2019-01-07
    • 2020-10-02
    • 2018-05-11
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多