Javascript 过滤对象数组,其中字段不完整
我有以下数组Javascript 过滤对象数组,其中字段不完整,javascript,reactjs,react-native,Javascript,Reactjs,React Native,我有以下数组 [ { "id": 1, "name": "Ruan Duarte", "idade": 11, "work": { "id": 2, "name": "React" } }, { "id": 2, "n
[
{
"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, ""))
)
})
记住,我有一个要搜索的输入,在状态下,它的值设置为search
但是,我得到一个错误,因为该字段未填充请尝试此解决方案
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, ""))
)
})
您可以在
filter
callback上为对象值添加验证
这里,i?.work=i?i、 工作:未定义
const数组=[
{
“id”:1,
“姓名”:“阮·杜阿尔特”,
“idade”:11,
“工作”:{
“id”:2,
“名称”:“反应”
}
},
{
“id”:2,
“姓名”:“劳尔·迪亚斯”,
“idade”:13
},
{
“id”:7,
“姓名”:“Caio Ribeiro”,
“idade”:60,
“工作”:{
“id”:4,
“名称”:“Rails”
}
},
{
“id”:3,
“姓名”:“菲利佩·利马”,
“idade”:55
},
{
“id”:4,
“姓名”:“卡米拉”,
“idade”:25,
“工作”:{
“id”:3,
“名称”:“植物”
}
}
]
常量搜索='Phy';
console.log(array.filter)(i)=>{
返回(
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, ""))
);