【问题标题】:This filter is not returning expected result此过滤器未返回预期结果
【发布时间】:2021-07-11 17:28:16
【问题描述】:
function get20(arr){
 let result = arr.filter((theArtist) => {
   let birth = Number(theArtist.years.splice(0,3))
   let death = Number(theArtist.years.splice(7,10))
   return birth >= 1900 && death <= 2000;
  })
 return result;
}

这一直给我错误“theArtist.years.splice 不是函数”,我不明白为什么它不采用“years”字符串的前四个和最后四个字母并将它们转换为数字。年份字符串看起来像“1971 - 1984”

【问题讨论】:

  • 因为splice是一个数组函数?
  • 请同时添加arr。

标签: javascript arrays function object filter


【解决方案1】:

使用slice 代替splice:

'1971 - 1984'.slice(0,4) // '1971'
'1971 - 1984'.slice(7,11) // '1984'

【讨论】:

    【解决方案2】:

    Splice 是一种用于数组的方法,而不是字符串。试试这个:

    years = theArtist.years.split('')
    let birth = Number(years.splice(0,4))
    let death = Number(years.splice(7,4))
    

    或者,使用子字符串。

    let birth = Number(theArtist.years.substring(0,4))
    let death = Number(theArtist.years.substring(7,11))
    

    【讨论】:

    • 您是否尝试过这些解决方案。两者都因不同的原因而失败
    • 我没有,只是使用 OP 的索引来快速回答。双重检查功能并编辑正确。
    • 所以我修复了这个函数,但现在它返回两个对象。我只希望它返回通过该条件的对象中的名称值。我不知道该怎么做。
    • 澄清一下,arr 是一个“艺术家”数组,其中有一个“名称”和“年份”字段。您正在尝试将数组过滤到仅在 1900 年和 2000 年之间出生和死亡的艺术家。该函数返回一个符合您的条件的艺术家对象数组,但您只需要他们的名字(在一个数组中)。对吗?
    • 已经尝试了好几个小时了。
    【解决方案3】:

    您应该在字符串上使用substring(splice 是数组的类似函数)。另请注意,您的索引偏离了 1 !

    var years = "1971 - 1984";
    let birth = Number(years.substring(0,4))
    let death = Number(years.substring(7,11))
    console.log(birth,death)

    【讨论】:

    • 所以我修复了这个函数,但现在它返回两个对象。我只希望它返回通过该条件的对象中的名称值。我不知道该怎么做
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 2010-09-22
    • 2021-05-17
    • 2018-02-19
    相关资源
    最近更新 更多