Создание функции, которая может искать элемент в массиве объектов? - PullRequest
0 голосов
/ 05 января 2020

У меня есть этот массив объектов:

var 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"}
];

И я должен создать функцию, в которой вы записываете имя, и функция может сказать вам, является ли она частью массива объектов или нет , Кто-нибудь может мне помочь?

Ответы [ 3 ]

1 голос
/ 05 января 2020

Эта функция будет возвращать объекты, для которых либо 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>
0 голосов
/ 06 января 2020
function returnWetherNameMatch(personArr,name){
    let matched =  personArr.filter(person => {
    return person.firstName.toLowerCase() === name.toLowerCase() || person.lastName.toLowerCase() === name.toLowerCase()
  });
  if(matched.length>0) {
  return true;
  } else
    return false;
}

var 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"}
];

var isNamePresent = returnWetherNameMatch(person,"Josh")

console.log(isNamePresent);

0 голосов
/ 05 января 2020

Один подход:

function isPartOfArrayOfObjects(person, name) {
    let found = false;

    person.forEach(entry => {
        Object.keys(entry).forEach(key => {
            if (entry[key] === name) {
                found = true;
            }
        });
    });

    return found;
}

И если вы хотите, чтобы он проверял значения firstName и lastName:

function isPartOfArray(person, name) {
    return person.some(entry => entry.firstName === name || entry.lastName === name);
}
...