为了账号安全,请及时绑定邮箱和手机立即绑定

过滤对象数组,其中字段不完整

过滤对象数组,其中字段不完整

陪伴而非守候 2023-05-25 17:05:35

我有以下数组


[

  {

    "id": 1,

    "name": "Ruan Duarte",

    "idade": 11,

    "work": {

      "id": 2,

      "name": "React"

    }

  },

  {

    "id": 2,

    "name": "Raul Dias",

    "idade": 13

  },

  {

    "id": 7,

    "name": "Caio Ribeiro",

    "idade": 60,

    "work": {

      "id": 4,

      "name": "Rails"

    }

  },

  {

    "id": 3,

    "name": "Felipe Lima",

    "idade": 55

  },

  {

    "id": 4,

    "name": "Camila",

    "idade": 25,

    "work": {

      "id": 3,

      "name": "Phyton"

    }

  }

]

我有一个这种格式的数组,其中某些角落的 work.name 字段为空。我尝试按如下方式进行过滤......


array.filter((i) => {

  return (

    i.work.name.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "")

      .includes(search.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, ""))

  )

})

记住我有一个搜索输入,并且在状态下它的值是用搜索设置的;


但是我得到一个错误,因为该字段未填写


查看完整描述

3 回答

?
郎朗坤

TA贡献1764条经验 获得超9个赞

您可以在回调中为对象值添加验证filter。


这里,i?.work = i ? i.work : undefined


const array = [

  {

    "id": 1,

    "name": "Ruan Duarte",

    "idade": 11,

    "work": {

      "id": 2,

      "name": "React"

    }

  },

  {

    "id": 2,

    "name": "Raul Dias",

    "idade": 13

  },

  {

    "id": 7,

    "name": "Caio Ribeiro",

    "idade": 60,

    "work": {

      "id": 4,

      "name": "Rails"

    }

  },

  {

    "id": 3,

    "name": "Felipe Lima",

    "idade": 55

  },

  {

    "id": 4,

    "name": "Camila",

    "idade": 25,

    "work": {

      "id": 3,

      "name": "Phyton"

    }

  }

]


const search = 'Phy';

console.log(array.filter((i) => {

  return (

    i?.work?.name?.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "")

      .includes(search.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, ""))

  )

}));


查看完整回答
反对 回复 2023-05-25
?
www说

TA贡献1620条经验 获得超8个赞

试试这个解决方案。


array.filter((i) => {

  return (

    i.work && i.work.name && i.work.name.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "")

      .includes(search.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, ""))

  )

})


查看完整回答
反对 回复 2023-05-25
?
四季花海

TA贡献1646条经验 获得超5个赞

array.filter(i =>

    i?.work?.name?.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "")

      .includes(search.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, ""))

);


查看完整回答
反对 回复 2023-05-25
  • 3 回答
  • 0 关注
  • 18 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信