[英]Filter the array of objects with optional values
我有一個對象數組,對象可以有可選的name
值或subject
值。
還有一個過濾器字符串。
我必須編寫過濾器函數,如果這些值之一包含這個字符串,它就會檢查。
const filterString = e.target.value.toLowerCase();
if (filterString != "") {
let filteredItemsList = this.state.itemsList.filter(
el =>
el.subject
.toLocaleLowerCase()
.includes(e.target.value.toLocaleLowerCase()) ||
el.name
.toLocaleLowerCase()
.includes(e.target.value.toLocaleLowerCase())
);
this.setState({
itemsList: filteredItemsList,
filter: e.target.value.toLocaleLowerCase()
});
這就是我現在所擁有的。 我收到錯誤,例如Cannot read property "toLocaleLowerCase" of undefined
,因為我的元素有名稱或主題,我該如何避免這種情況?
你可以試試這個。
const filterString = e.target.value.toLowerCase();
if (filterString != "") {
let filteredItemsList = this.state.itemsList.filter(
el => {
const inSubject = el.subject ?
el.subject.toLocaleLowerCase()
.includes(e.target.value.toLocaleLowerCase()) : false;
const inName = el.name ?
el.name.toLocaleLowerCase()
.includes(e.target.value.toLocaleLowerCase()) : false;
return inSubject || inName;
});
this.setState({
itemsList: filteredItemsList,
filter: e.target.value.toLocaleLowerCase()
});
我認為向項目添加驗證可能會起作用
const filterString = e.target.value && e.target.value.toLowerCase();
if ( filterString ) {
const { itemsList } = this.state;
const filteredItemsList = [...filteredItemsList.filter(
el => {
const inSubject = el.subject &&
el.subject.toLocaleLowerCase()
.includes(filterString);
const inName = el.name &&
el.name.toLocaleLowerCase()
.includes(filterString));
return inSubject || inName;
})];
this.setState({
itemsList: filteredItemsList,
filter: filterString
});
}
const filterString = e.target.value.toLowerCase();
if (filterString === '') return;
let filteredItemsList = this.state.itemsList.filter(
el => [el.subject, el.name]
.some(
item => item && item
.toLocaleLowerCase()
.includes(e.target.value.toLocaleLowerCase())
)
);
this.setState({
itemsList: filteredItemsList,
filter: e.target.value.toLocaleLowerCase(),
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.