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

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

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

陪伴而非守候 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贡献1921条经验 获得超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贡献1775条经验 获得超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贡献1811条经验 获得超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 关注
  • 107 浏览
慕课专栏
更多

添加回答

举报

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