'Unable to retrieve the correct value from a list of object within object

I am quite new to javascript and I've been struggling with this type of challenge. I understand the problem and implement a logic to solve the issue but I am unable to display the values correctly.

Can someone take a look at my code and maybe point me to the correct direction??

const contacts = [
  {
    name: "Laurel",
    phone: "123 456 7890",
    email: "[email protected]",
    friends: ["Hardy", "Abbott", "Costello"],
  },
  {
    name: "Hardy",
    phone: "321 654 0987",
    email: "[email protected]",
    friends: ["Laurel", "Buster"],
  },
  {
    name: "Buster",
    phone: "987 654 3210",
    email: "[email protected]",
    friends: ["Hardy"],
  },
  {
    name: "Abbott",
    phone: "888 123 4567",
    email: "[email protected]",
    friends: ["Costello", "Laurel"],
  },
  {
    name: "Costello",
    phone: "767 676 7676",
    email: "[email protected]",
    friends: ["Abbott", "Laurel"],
  },
];

function findFriend(contacts, name, field) {
  let results = {};

  contacts.forEach(function (elm) {
// loop through all contacts and look for name
    if (elm.name === name) {
// select the first friend
      let friend = elm.friends[0];

      contacts.forEach((elm) => {
// looking for the friend in the contacts object
        if (elm.name === friend) {
// when found - this will get the required field and write it to the result
          results = elm[field]; 
        }
      });
    }
  });
  return results; // return the results
}

/

/ Test cases

console.log(findFriend(contacts, "Abbott", "phone")); // returns {name: "Costello", phone: "767 676 7676"}
console.log(findFriend(contacts, "Buster", "email")); // returns {name: "Hardy", email: "[email protected]"}
console.log(findFriend(contacts, "Bob", "phone")); // returns "Not found"
console.log(findFriend(contacts, "Costello", "birthday")); // returns "Not found"


Solution 1:[1]

You should change results = elm[field]; to if (elm[field]) { results[field] = elm[field]; results.name = elm.name; }, this because you need to verify that property exist. You should also change return results; by return Object.keys(results).length ? results : "Not found"; if results is empty means that the friend was not found in the contacts list or that the searched property is not set in that person.

const contacts = [
  {
    name: "Laurel",
    phone: "123 456 7890",
    email: "[email protected]",
    friends: ["Hardy", "Abbott", "Costello"],
  },
  {
    name: "Hardy",
    phone: "321 654 0987",
    email: "[email protected]",
    friends: ["Laurel", "Buster"],
  },
  {
    name: "Buster",
    phone: "987 654 3210",
    email: "[email protected]",
    friends: ["Hardy"],
  },
  {
    name: "Abbott",
    phone: "888 123 4567",
    email: "[email protected]",
    friends: ["Costello", "Laurel"],
  },
  {
    name: "Costello",
    phone: "767 676 7676",
    email: "[email protected]",
    friends: ["Abbott", "Laurel"],
  },
];

function findFriend(contacts, name, field) {
  let results = {};

  contacts.forEach(function (elm) {
    // loop through all contacts and look for name
    if (elm.name === name) {
      // select the first friend
      let friend = elm.friends[0];

      contacts.forEach((elm) => {
        // looking for the friend in the contacts object
        if (elm.name === friend) {
          // when found - this will get the required field and write it to the result
          if (elm[field]) {
            results[field] = elm[field];
            results.name = elm.name;
          }
        }
      });
    }
  });
  return Object.keys(results).length ? results : "Not found"; // return the results
}

console.log(findFriend(contacts, "Abbott", "phone")); // returns {name: "Costello", phone: "767 676 7676"}
console.log(findFriend(contacts, "Buster", "email")); // returns {name: "Hardy", email: "[email protected]"}
console.log(findFriend(contacts, "Bob", "phone")); // returns "Not found"
console.log(findFriend(contacts, "Costello", "birthday")); // returns "Not found"

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1