Я использую Angular 6
и ngx-datatable для отображения данных в таблице.
Если столбцы известны ранее, фильтр работает как
updateFilter(event) {
const val = event.target.value.toLowerCase();
// filter our data
// update the rows
this.rows = this.temp.filter(function (d) {
if (d.user.name.toLowerCase().indexOf(val) !== -1 || !val) {
return d.user.name.toLowerCase().indexOf(val) !== 1 || !val;
} else if (d.user.email.toLowerCase().indexOf(val) !== -1 || !val) {
return d.user.email.toLowerCase().indexOf(val) !== -1 || !val;
}
});
}
Но в моем случае столбцы динамические и изменяются вместе с данными.
Вот как я извлекаю имя столбца из данных
private _processData() {
const columns = Object.keys(this.data.data[0]);
this.columnsList = columns;
for (const c of columns) {
this.columns.push({
prop: c,
name: c.toUpperCase()
});
}
this.rows = this.data.data;
this.temp = this.data.data;
}
Теперь я хочу изменить updateFilter()
функция для использования с динамическим списком столбцов columnsList .Это то, что я сделал.
updateFilter(event) {
const val = event.target.value.toLowerCase();
const columns = this.columnsList;
// filter our data
// update the rows
this.rows = this.temp.filter(function (d) {
for (const c of columns) {
if (d[c].toLowerCase().indexOf(val) !== -1 || !val) {
return d[c].toLowerCase.indexOf(val) !== -1 || !val;
}
}
});
}
Но при поиске данных выдается ошибка типа
ERROR TypeError: "d[c].toLowerCase.indexOf is not a function"
Как использовать динамические имена столбцов для генерации updateFilter()
метод для эффективной работы.