用for循环JS迭代数组

时间:2018-01-16 08:24:43

标签: javascript arrays object for-loop

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

如果 firstName 与任何联系人不对应,则返回“没有此类联系”

如果 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;
        }
    }
}

4 个答案:

答案 0 :(得分:1)

一旦找到给定firstName的联系人,就可以使用break out of loop,然后检查传递的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'));

答案 1 :(得分:0)

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

&#13;
&#13;
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'));
&#13;
&#13;
&#13;

答案 2 :(得分:0)

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

答案 3 :(得分:0)

使用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';
}