Эта функция будет возвращать объекты, для которых либо firstName
, либо lastName
соответствуют переданному аргументу (строка поиска) input
:
function filterPersons(input) {
const results = person.filter(function(p){
if (input.length == 0) return false;
return (p.firstName+' '+p.lastName).match(new RegExp(input, 'i'));
});
return results;
};
Пустой массив означает: ни одного, ни первого, ни последнего имя соответствует входной строке.
В этом решении для фильтрации используется функция, которую вы можете запустить:
// your input array
const person = [
{firstName: "Josh", lastName: "Doe", age: 50, eyeColor: "blue"},
{firstName: "Jake", lastName: "Denver", age: 34, eyeColor: "blue"},
{firstName: "Sam", lastName: "Kiszka", age: 20, eyeColor: "brown"}
];
// the function you are looking for
const filterPersons = function(input) {
const results = person.filter(function(p){
if (input.length == 0) return false;
return (p.firstName+' '+p.lastName).match(new RegExp(input, 'i'));
});
return results;
};
// this shows the filtering in action
window.onload = function(){
const input = document.getElementById('val');
const output = document.getElementById('out');
input.addEventListener("keyup", function (ev) {
const val = ev.target.value;
// here we are calling the filter function
const results = filterPersons(val);
if (results.length > 0) {
output.innerHTML = 'Yes! ' + JSON.stringify(results);
} else {
output.innerHTML ='No!';
}
});
}
<input id="val" />
<h3>included?</h3>
<div id="out">
</div>