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

我有以下数组


[

  {

    "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, ""))

  )

})

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


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


陪伴而非守候
浏览 108回答 3
3回答

郎朗坤

您可以在回调中为对象值添加验证filter。这里,i?.work = i ? i.work : undefinedconst 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, ""))  )}));

www说

试试这个解决方案。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, ""))  )})

四季花海

array.filter(i =>    i?.work?.name?.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "")      .includes(search.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "")));
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript