перебор массива с циклом JS

1

У меня есть массив объектов (контактов), и мне нужно написать одну функцию, которая должна проверить, является ли firstName (первый параметр функции) фактическим контактом firstName, и данное свойство (prop является вторым параметром функции) является свойством этого контакта. Если оба они истинны, верните "значение" этого свойства.

Если firstName не соответствует никаким контактам, тогда верните "Нет такого контакта",

Если prop не соответствует каким-либо действительным свойствам, верните "Нет такого свойства",

Я знаю, что мне нужно делать, судо, я написал это, но, чтобы написать это в фактическом 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;
        }
    }
}
  • 0
    Покажите нам, как выглядит ваш массив contracts .
  • 0
    Массив контактов добавлен в вопросе выше.
Теги:
object
arrays
for-loop

4 ответа

1
Лучший ответ

Вы можете использовать break out of loop, как только найдете контакт с данным 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'));
0

Вы можете использовать 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'));
  • 0
    Спасибо, но это не работает. это назначение, и мне нужно использовать цикл для перебора массива / объектов
  • 0
    @ Hacene.N Просто запустите фрагмент кода, и вы увидите, что он работает. Для ясности и читабельности кода вместо традиционного цикла я использую array.find
Показать ещё 1 комментарий
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];
}
  • 0
    Спасибо, но это не работает. это присваивание, и мне нужно использовать цикл for для перебора массива / объектов.
  • 0
    Я обновил ответ с помощью цикла for
0

С инструкцией For Loop это должно быть примерно так:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню