我们假设我们具有以下.filter函数:
search(searchQuery: string) {
let results = myArray.filter(item =>
item.title.toLowerCase().includes(searchQuery) ||
item.description.toLowerCase().includes(searchQuery)
);
return results;
}
在此示例中,我们可以认为item
并不总是具有description
属性,而只是有些时候。
在这种情况下,函数将失败并显示错误:
错误TypeError:无法读取未定义的属性“ toLowerCase”
我们如何仍然可以在数组中搜索并仅在搜索中包含description
属性?在.filter()
函数中可以做到吗?
答案 0 :(得分:5)
您可以采用默认值。
直接选择
(item.description || '').toLowerCase().includes(searchQuery)
或使用默认值进行销毁。
results = myArray.filter(({ title = '', description = '' }) =>
title.toLowerCase().includes(searchQuery) ||
description.toLowerCase().includes(searchQuery)
);
答案 1 :(得分:1)
您可以执行以下操作:
const myArray = [
{
title: 'Test 123',
},
{
title: 'Test 123',
description: 'test',
},
{
title: 'What',
},
{
title: 'Fix',
description: '456123',
},
];
const search = (text) => {
let results = myArray.filter(item => {
if (item.description) {
return item.title.toLowerCase().includes(text) || item.description.toLowerCase().includes(text);
}
});
return results;
}
const results = search('test');
console.log(results);
答案 2 :(得分:0)
search(searchQuery: string) {
return myarray.filter(item => 'description' in item
? item.description.toLowerCase().includes(searchQuery)
: item.title.toLowerCase().includes(searchQuery)
);
}
可能也想对title
做同样的检查,但是您走了多远。