有没有办法遍历数组中的对象?

时间:2019-10-03 15:25:09

标签: javascript

说我有一个对象数组:

var contacts = [
    {
        "firstName": "Akira",
        "lastName": "Laine",
        "number": "0543236543",
    },
    {
        "firstName": "Harry",
        "lastName": "Potter",
        "number": "0994372684",
        "likes": ["Hogwarts", "Magic", "Hagrid"]
    }
]

我正在尝试遍历对象中的键和值

我尝试使用for循环

function checker (name){
  name = "";
  for(i = 0; i < contacts.length; i++){     
    if(name === (contacts[i].firstName)){
      return "yes" ;
    }
    else{
      return "No such Contact";   
    }
  }
}

checker("Harry");

使用参数“ Harry”调用该函数应该为true并返回“ yes”,而是返回“ No such contact”!

4 个答案:

答案 0 :(得分:1)

正如@Nicholas Tower指出的那样,您正在用返回值中断循环执行。

当您有一系列对象时,请尝试

contacts.find(contact => contact.name === nameYoureLookingFor)

Array.prototype.find()将为您提供第一个与条件匹配的元素。在这种情况下,对象必须包含具有给定值的属性名称。 一个对象是一个真实值,因此您可以在这里使用单线

function checker(name){
    return contacts.find(contact => contact.name === name) ? 'yes':'No such Contact';
}

答案 1 :(得分:0)

   name = "";

您正在将名称重新分配给"",而不是使用函数的输入值。

您基本上是在比较

"" === contacts[i].firstName

,它将始终根据您的输入数据使用else语句。

答案 2 :(得分:0)

尝试一下:

var checker = (name) => {
  contacts.forEach(item => {
    if(item.firstName === name){
      return console.log('Yes');
    }else{
      return 'No Match found'
    }
  })
}

答案 3 :(得分:0)

有很多方法可以做到这一点。正如@Nicholas Tower所说,在您的示例中,只需将else返回移到循环外即可解决:

function checker(name) {

  for (let i = 0; i < contacts.length; i++) {
    if(name === (contacts[i].firstName)){ return "yes" ; }
  }

  return "No such Contact";
}

checker("Harry");

您可以使用for..of循环以更简洁的方式实现相同目的:

function checker(name) {

  for (let contact of contacts) {
    if (name === contact.firstName) { return "yes" ; }
  }

  return "No such Contact";
}

checker("Harry");

...或发现:

function checker (name){
  // will return the object if it exists, undefined if not
  const contact = contacts.find((contact) => contact.firstName === name);

  // convert to a boolean and return the 'yes' if truthy (the object), 'No such Contact' if falsy (the undefined)
  return !!contact ? 'yes' : 'No such Contact';
}

checker("Harry");