У меня есть функция фильтра, которая отлично работает, когда я использую в ней имя статического столбца, например:
this.listOfData = this.listOfData.filter((item: DataItem) =>
item.name.toLowerCase().indexOf(newValue.toLowerCase()) !== -1
);
ПС: item.name
Но мне нужно искать в каждом столбце item
, как я могу это сделать?
PS: name
должен быть динамичным.
Мой ListofData
имеет следующие столбцы:
listOfData({
id:
ticket_number:
status_name:
name: // currently my function is set to this value only.
created_by_full_name:
receive_time:
response_time:
resolution_time:
})
на основе ответа Allabakash
у меня есть окончательный код ниже, который возвращает много ошибок машинописного текста:
ngOnInit(): void {
// this listens to the input value from the service and does something on change.
this.globalSearchService.searchTerm.subscribe((newValue: string) => {
// this is where you would apply your existing filtering.
this.searchTerm = newValue;
if (newValue != null) {
this.visible = false
this.listOfData = this.listOfData.filter((item: DataItem) =>
let keys = Object.keys(item);
for (let key of keys) {
if (typeof item[key] === 'string' &&
item[key].toLowerCase().indexOf(newValue.toLowerCase()) !== -1) {
return true;
}
}
return false;
);
}
});
}
Если вы хотите выполнять динамический поиск по всем свойствам, вы можете попробовать что-то вроде этого.
this.listOfData = this.listOfData.filter((item: DataItem) => {
let keys = Object.keys(item);
for (let key of keys) {
if (typeof item[key] === 'string' &&
item[key].toLowerCase().indexOf(newValue.toLowerCase()) !== -1) {
return true;
}
}
return false;
}
);
можете ли вы обернуть функцию фильтра внутри кода в фигурных скобках {}
извини не понял что ты сказал
обновил ответ, где фигурные скобки отсутствовали, можешь попробовать
конечно, создайте новый вопрос.
Вы можете использовать ES6 для однострочного решения. Ниже приведен пример использования ванильного Javascript.
const initialListOfData = [
{ name: 'Peter', surname: 'John'},
{ name: 'Judas', surname: 'James'},
{ name: 'Paul', surname: 'Peter'},
{ name: 'Petrover', surname: 'Junior'}
]
const searchItem = 'pet'
const listOfData = initialListOfData.filter(
item => Object.keys(item).some(prop =>
(new RegExp(searchItem.toLowerCase())).test(item[prop].toLowerCase())
))
console.info(listOfData)
Для вашей проблемы с использованием машинописного текста это будет
this.listOfData = initialListOfData.filter(
(item: any) => Object.keys(item).some((prop: any) =>
(new RegExp(newValue.toLowerCase())).test(item[prop].toLowerCase())
))
спасибо, но это дает много ошибок машинописного текста, таких как
,
илиDeclaration or statement expected
. я обновлю свой вопрос на основе вашего ответа