0

I'd like to create a function that iterates through an array containing separate objects with name, surname and age properties. The function should take a parameter "name" and return the name, surname and age in the console.

How would I do this? I've looked at some other questions but can't seem to figure out how to do it. I've created this so far...

var people = [
  { name: "Sue", surname: "Beckett", age: 50},
  { name: "Bill", surname: "Borough", age: 44},
  { name: "Janet", surname: "Jupp", age: 23},
  { name: "Peter", surname: "Pepper", age: 21},
  { name: "Samantha", surname: "Salad", age: 17}
];


function person(name) {
  // code here
}

person(sue)
2
  • 4
    Search for array filter or find in latest version of JS. Commented Nov 6, 2017 at 8:53
  • 2
    Make sure that you pass the name as string ("Sue" instead of sue), also check the case-sensitivity for the match Commented Nov 6, 2017 at 8:54

5 Answers 5

2

Simply use Array#find() method like this:

function person(name) {
  return people.find(function(p) {
    return p.name == name;
  });
}
console.log(person("Samantha"));

Demo:

var people = [{
    name: "Sue",
    surname: "Beckett",
    age: 50
  },
  {
    name: "Bill",
    surname: "Borough",
    age: 44
  },
  {
    name: "Janet",
    surname: "Jupp",
    age: 23
  },
  {
    name: "Peter",
    surname: "Pepper",
    age: 21
  },
  {
    name: "Samantha",
    surname: "Salad",
    age: 17
  }
];

function person(name) {
  return people.find(function(p) {
    return p.name == name;
  });
}
console.log(person("Samantha"));
console.log(Object.values(person("Samantha")));

Note:

  • Make sure you pass the name as a string when you call your method, passing just sue without "" will assume you have a variable called sue.
  • Note that you can use Object.values() to show only the values of the object properties, instead of the whole object.

Simply write :

console.log(Object.values(person("Samantha")));
Sign up to request clarification or add additional context in comments.

Comments

0

var people = [
  { name: "Sue", surname: "Beckett", age: 50},
  { name: "Bill", surname: "Borough", age: 44},
  { name: "Janet", surname: "Jupp", age: 23},
  { name: "Peter", surname: "Pepper", age: 21},
  { name: "Samantha", surname: "Salad", age: 17}
];
    
    
function person(name) {
  for (var key in people) {
    var person = people[key];
    if (name === person.name) {
      console.log(person);
    }
  }
}

person("Sue"); // string always needs quotes: " or ' character

Comments

0

You could filter the array by checking the lower case value of name property and name variable.

function person(name) {
    people
        .filter(o => o.name.toLowerCase() === name.toLowerCase())
        .forEach(({ name, surname, age}) => {
            console.log('name:', name);
            console.log('suname:', surname);
            console.log('age:', age);
        });
}

var people = [{ name: "Sue", surname: "Beckett", age: 50 }, { name: "Bill", surname: "Borough", age: 44 }, { name: "Janet", surname: "Jupp", age: 23 }, { name: "Peter", surname: "Pepper", age: 21 }, { name: "Samantha", surname: "Salad", age: 17 }];

person('sue');

1 Comment

0

Using filter:

var people = [
    { name: "Sue", surname: "Beckett", age: 50},
    { name: "Bill", surname: "Borough", age: 44},
    { name: "Janet", surname: "Jupp", age: 23},
    { name: "Peter", surname: "Pepper", age: 21},
    { name: "Samantha", surname: "Salad", age: 17}
];


function person(personName) {
    var user = people.filter(function (user) {
       return (user.name.toLowerCase() == personName.toLowerCase());
    });
    return user[0] !== undefined ? user[0] : 'not found';
}


console.log(person('sue'));

Comments

-1

var people = [
  { name: "Sue", surname: "Beckett", age: 50},
  { name: "Bill", surname: "Borough", age: 44},
  { name: "Janet", surname: "Jupp", age: 23},
  { name: "Peter", surname: "Pepper", age: 21},
  { name: "Samantha", surname: "Salad", age: 17}
];


function person(name) {
  people.map((data,index)=>{
    if(data.name == name)
    {
      console.log(data.name);
      console.log(data.surname);
      console.log(data.age);
      return;
    }
  })
}

person("Sue");

3 Comments

The provided example is far from being a good answer. Firstly one should not mix data processing with displaying data (here it is not even for debugging purpose that also would be questionable). Secondly one should not bend methods from its intended purpose, here mapping misused as filter that not even returns an expected result but does data-output instead.
i thought that he just want to log result in console
You are right, that's what the OP did ask for. I just criticize your approach which I do not consider feasible/valid for the already mentioned reasons.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.