Как я могу использовать indexOf (), чтобы проверить, совпадает ли строка в моем массиве со строкой в ​​другом массиве? - PullRequest
0 голосов
/ 01 декабря 2018

У меня есть функция, которая фильтрует таблицу для определенных элементов.В моем приложении много таблиц с разными фильтрами, поэтому я написал функцию, которая может фильтровать таблицу с динамическими данными.Некоторые из фильтров используют входные данные, когда пользователь должен ввести свой запрос.Если запрос пользователя только частично совпадает со строкой в ​​одном из массивов таблицы, таблица не возвращает ожидаемых результатов.

Например:

filterArr = [null, null, "246", null]
TableFilter = [
    {"name": Matthew Shapiro", "claim_number":"2469135-6", "type": "Medical", "date": "05/04/2018", "doctor": "John Smith", "hospital": "University Hospital"},
    {"name": "John Connor", "claim_number": "1352460-2", "type": "Medical", "date": "01/01/2018", "doctor": "John Smith", "hospital": "University Hospital"},
    {"name": "Sam Heist", "claim_number": "1270120-9", "type": "Medical", "date": "02/11/2018", "doctor": "William Rodgers", "hospital":  "Springfield Hospital"}
]

В этом примере таблица не вернетсяпервые две строки, хотя 246 можно найти в «2469135-6» и «1352460-2».Если бы я обновил запрос в фильтре до полной строки любого числа, это было бы.

Как я могу обновить свою функцию, чтобы она возвращала соответствующие TableFilters, если строка в filterArr частично совпадает со строкой в ​​TableFilter [i]?

Ниже приведена моя функция, а также снимок экрана одного измои столы.

let rowArr = []
let filteredResults = []

this.rows.map(element => {
    rowArr = Object.values(element); // Object.values of each row
    rowArr.filter(e => { 
        if (rowArr.indexOf(filterArr) !== -1) {
            // check for substring match. Currently not working
            console.log('match');
        }

        if (filterArr.includes(e)) { // check if filter has value that matches row
            filteredResults.push(element);
            this.rows = filteredResults;
        }
    })
})

enter image description here

1 Ответ

0 голосов
/ 01 декабря 2018

Вы хотите filter ваш массив TableFilter для строк, где некоторые значений полей содержат некоторые значений filterArray.

var filterArr = [null, null, "246", null];
var TableFilter = [
{"name": "Matthew Shapiro", "claim_number":"2469135-6", "type": "Medical", "date": "05/04/2018", "doctor": "John Smith", "hospital": "University Hospital"},
{"name": "John Connor", "claim_number": "1352460-2", "type": "Medical", "date": "01/01/2018", "doctor": "John Smith", "hospital": "University Hospital"},
{"name": "Sam Heist", "claim_number": "1270120-9", "type": "Medical", "date": "02/11/2018", "doctor": "William Rodgers", "hospital":  "Springfield Hospital"}
];

var foundResults = TableFilter.filter(row => {
  return Object.keys(row).some(fieldName => {
    return filterArr.some(filt => {
      return row[fieldName].indexOf(filt) > -1;
    });
  });
});

console.log(foundResults);
...