Как написать динамическую функцию для моего углового приложения - PullRequest
0 голосов
/ 17 мая 2019

У меня проблема с написанием этого кода динамически.

Как я могу написать testtest функцию динамически, если в будущем данные могут иметь разные ключи и значения?

мой объект json выглядит так:

data = [
    {
      name: 'John',
      id: 1,
      colour: 'Green',
      pet: 'Dog'
    },
    {
      name: 'Sarah',
      id: 2,
      colour: 'Purple',
      pet: 'Cat'
    },
    {
      name: 'Lindsay',
      id: 3,
      colour: 'Blue',
      pet: 'Lizard'
    },
    {
      name: 'Megan',
      id: 4,
      colour: 'Orange',
      pet: 'Dog'
    }
];

и у меня есть значение фильтра

filterValues = {
    name: '',
    id: '',
    colour: '',
    pet: ''
};

теперь функция

createFilter(): (data: any, filter: string) => boolean {
    let filterFunction = function(data, filter): boolean {
        let searchTerms = JSON.parse(filter);
        let result = this.testtest(data, searchTerms);
        return result;
    }
    return filterFunction;
}

testtest(data, searchTerms): boolean {
    return data.name.toLowerCase().indexOf(searchTerms.name) !== -1
        && data.id.toString().toLowerCase().indexOf(searchTerms.id) !== -1
        && data.colour.toLowerCase().indexOf(searchTerms.colour) !== -1
        && data.pet.toLowerCase().indexOf(searchTerms.pet) !== -1;
}

Ответы [ 2 ]

0 голосов
/ 17 мая 2019

вы можете использовать что-то подобное с ES6 -

data.filter(obj => Object.keys(obj).some(key => obj[key] == searchText));
0 голосов
/ 17 мая 2019

Вы можете сделать что-то вроде этого:

testtest(data, searchTerms): boolean {
var result = false;
for (var property in data) {
if (data.hasOwnProperty(property)) {
     result = ( property.toLowerCase().indexOf(searchTerms[property]) !==-1 )
     if(!result){
       return result;
     }   
}
else {
  return result;
}
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...