【问题标题】:Creating a function that can search for an element in an array of objects?创建一个可以在对象数组中搜索元素的函数?
【发布时间】:2020-01-05 18:10:29
【问题描述】:

我有这个对象数组:

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

我必须创建一个函数,在其中写下一个名称,该函数可以告诉你它是否是对象数组的一部分。有人可以帮助我吗?

【问题讨论】:

  • 所以你想同时搜索firstNamelastName 字段?
  • 如果表述得更清楚,很多问题会更容易解决。 “Josh”是否匹配某人,“Doe”是否匹配,“Josh Doe”是否匹配? “乔斯”或“乔希”怎么样?
  • 要么。所以我可以搜索姓氏、名字或两者都搜索,结果会是真的

标签: javascript arrays function object arrayobject


【解决方案1】:

此函数将返回 firstNamelastName 与传递的参数(搜索字符串)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>

【讨论】:

  • 对不起,我不知道如何使用jQuery
  • @KarlaJensen 如果可以解决您的问题,请随时将此答案标记为正确。
【解决方案2】:

一种方法:

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

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

    return found;
}

如果您只希望它检查 firstNamelastName 值:

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

【讨论】:

  • key是什么意思?
  • key 指的是firstNamelastName 等...你可以随意命名。我还添加了一个你可能更喜欢@KarlaJensen 的替代方案
  • 谢谢!入口代表什么?
  • Entry 是每个“数组条目”。所以一个条目是{firstName: "Josh", lastName: "Doe", age: 50, eyeColor: "blue"}。同样,您可以随意命名它
【解决方案3】:
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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-29
    相关资源
    最近更新 更多