【问题标题】:iterating over an array with for loop JS使用 for 循环 JS 遍历数组
【发布时间】:2018-01-16 08:24:43
【问题描述】:

我有一个对象数组 (contacts),我需要编写一个函数来检查 firstName (函数的第一个参数) 是否是实际联系人的 firstName并且给定的属性 (prop 是函数的第二个参数) 是该联系人的属性。如果两者都为真,则返回该属性的“值”。

如果 firstName 不对应任何联系人,则返回 “No such contact”

如果 prop 不对应任何有效属性,则返回 "No such property"

我知道我需要做什么,我写的 sudo 但是用实际的 JavaScript 写它我遇到了阻塞。

以下是我目前所写的:

var contacts = [
    {
        "firstName": "Akira",
        "lastName": "Laine",
        "number": "0543236543",
        "likes": ["Pizza", "Coding", "Brownie Points"]
    },
    {
        "firstName": "Harry",
        "lastName": "Potter",
        "number": "0994372684",
        "likes": ["Hogwarts", "Magic", "Hagrid"]
    },
    {
        "firstName": "Sherlock",
        "lastName": "Holmes",
        "number": "0487345643",
        "likes": ["Intriguing Cases", "Violin"]
    },
    {
        "firstName": "Kristian",
        "lastName": "Vos",
        "number": "unknown",
        "likes": ["Javascript", "Gaming", "Foxes"]
    }
];


function lookUpProfile(firstName, prop) {
    var value;
    for (i = 0; i < 2; i++) {
        if (contacts[i].firstName === true && contacts[i].prop === true) {
            value = contacts[i].prop;
            return value;
        }
    }
}

【问题讨论】:

  • 向我们展示您的 contracts 数组的外观。
  • 上面问题中添加的联系人数组。

标签: javascript arrays object for-loop


【解决方案1】:

您可以在找到具有给定firstName 的联系人后使用中断循环,然后检查传递的prop 值并相应地返回消息。

var contacts = [
    {
        "firstName": "Akira",
        "lastName": "Laine",
        "number": "0543236543",
        "likes": ["Pizza", "Coding", "Brownie Points"]
    },
    {
        "firstName": "Harry",
        "lastName": "Potter",
        "number": "0994372684",
        "likes": ["Hogwarts", "Magic", "Hagrid"]
    },
    {
        "firstName": "Sherlock",
        "lastName": "Holmes",
        "number": "0487345643",
        "likes": ["Intriguing Cases", "Violin"]
    },
    {
        "firstName": "Kristian",
        "lastName": "Vos",
        "number": "unknown",
        "likes": ["Javascript", "Gaming", "Foxes"]
    }
];


function lookUpProfile(firstName, prop) {
    var value = undefined;
    for (i = 0; i < contacts.length; i++) {
        if (contacts[i].firstName === firstName) {
            value = contacts[i];
            break;
        }
    }
    
    if(!value) {
        return 'No such contact';
    }
    
    if(!(prop in value)) {
        return 'No such property';
    }

    return value[prop];
}
console.log(lookUpProfile('Sherlock', 'likes'));
console.log(lookUpProfile('Harry', 'friends'));
console.log(lookUpProfile('John', 'likes'));

【讨论】:

    【解决方案2】:

    您可以使用array.prototype.find检查该联系人是否存在于数组中:

    var contacts = [{firstname: "aaa", prop1: "val1"}, {firstname: "bbb", prop2: "val2"}];
    
    function yourFunc(firstname, prop) {
      var ct = contacts.find(c => c.firstname === firstname);
      return ct ? ct[prop] || "No such property" : "No such contact";
    }
    
    console.log(yourFunc("aaa", 'prop2'));
    console.log(yourFunc("aaa", 'prop1'));
    console.log(yourFunc("bbb", 'prop2'));
    console.log(yourFunc("bbb", 'prop1'));
    console.log(yourFunc("ccc", 'prop1'));

    【讨论】:

    • 谢谢,但这不起作用。这是一个赋值,我需要使用 for 循环来遍历数组/对象
    • @Hacene.N 只需运行代码 sn-p,您就会看到它工作正常。为了代码的清晰和可读性,我没有使用传统的 for 循环,而是使用 array.find
    • 我知道这可以正常工作。我的意思是我的分配将被拒绝,因为它必须使用 for 循环来完成。感谢您的帮助:)
    【解决方案3】:

    使用 For 循环语句,应该是这样的:

    function lookUpProfile(firstName, prop) {
        var contact;
        for (var i = 0; i < contacts.length; i++) {
           if (contacts[i].firstName === firstName){
             contact = contacts[i];
             break;
           }
        }
        return contact ? ( contact[prop] ? contact[prop] : 'No such property') : 'No such contact';
    }
    

    【讨论】:

      【解决方案4】:
      function lookUpProfile(firstName, prop) {
          var contact;
          for (i = 0; i < contacts.length; i++) {
              if (contacts[i].firstName === firstName) {
                  contact = contacts[i];
                  break;
              }
          }
      
          if(!contact) {
              return 'No such contact';
          }
      
          if(!contact[prop]) {
              return 'No such property';
          }
      
          return contact[prop];
      }
      

      【讨论】:

      • 谢谢,但这不起作用。这是一个赋值,我需要使用 for 循环来遍历数组/对象。
      猜你喜欢
      • 1970-01-01
      • 2015-07-09
      • 1970-01-01
      • 1970-01-01
      • 2017-01-02
      • 2016-01-20
      • 1970-01-01
      • 2021-04-02
      • 1970-01-01
      相关资源
      最近更新 更多