Stgardner
Stgardner

Reputation: 21

Looping through array within an array to determine value

I need to loop through the following array using a for loop and determine if the persons age is 18 and over, or if they are under 18 and log a string accordingly.

Ive been trying a few different things like this:

var peopleWhoWantToSeeMadMaxFuryRoad = [
  {
    name: "Mike",
    age: 12,
    gender: "male"
  },{
    name: "Madeline",
    age: 80,
    gender: "female"
  },{
    name: "Cheryl",
    age: 22,
    gender: "female"
  },{
    name: "Sam",
    age: 30,
    gender: "male"
  },{
    name: "Suzy",
    age: 4,
    gender: "female"
  }
] 


for(var i = 0; i < peopleWhoWantToSeeMadMaxFuryRoad.length; i++){
    for(var j = 0; j < peopleWhoWantToSeeMadMaxFuryRoad[i].length; j++){
        if (j == 'number' && j < 18){
            console.log("person is under 18")
        }
    }
}

But I cant seem to get it . Any help would be appreciate

Upvotes: 2

Views: 250

Answers (6)

Harry Chilinguerian
Harry Chilinguerian

Reputation: 565

You could map a Boolean onto each person, filter by the Boolean, then iterate over the remaining array to log.

var peopleWhoWantToSeeMadMaxFuryRoad = [
  {
    name: "Mike",
    age: 12,
    gender: "male"
  },{
    name: "Madeline",
    age: 80,
    gender: "female"
  },{
    name: "Cheryl",
    age: 22,
    gender: "female"
  },{
    name: "Sam",
    age: 30,
    gender: "male"
  },{
    name: "Suzy",
    age: 4,
    gender: "female"
  }
];

var under18 = peopleWhoWantToSeeMadMaxFuryRoad.map((peeps)={
    peeps["under18"] = (peeps.age < 18);
    return peeps;
}).filter((peeps)=>{
    return peeps.uner18;
}).forEach((peeps)=>{
    console.log(`${peeps.name} is under 18`);
})

Upvotes: 0

ellipsis
ellipsis

Reputation: 12152

Using forEach

var peopleWhoWantToSeeMadMaxFuryRoad = [
  {
    name: "Mike",
    age: 12,
    gender: "male"
  },{
    name: "Madeline",
    age: 80,
    gender: "female"
  },{
    name: "Cheryl",
    age: 22,
    gender: "female"
  },{
    name: "Sam",
    age: 30,
    gender: "male"
  },{
    name: "Suzy",
    age: 4,
    gender: "female"
  }
] 
peopleWhoWantToSeeMadMaxFuryRoad.forEach((e)=>e.age<18?console.log(e.name + ' is underage'):true)

Upvotes: 0

Fyllekanin
Fyllekanin

Reputation: 274

Suggestion would be to use Array Filter to get rid of all 18 or over then loop the remaining and print the console.log.

const peopleWhoWantToSeeMadMaxFuryRoad = [..];

peopleWhoWantToSeeMadMaxFuryRoad.filter(person => person.age < 18)
    .forEach(person => console.log(`${person.name} is under 18`));

Upvotes: -1

Code Maniac
Code Maniac

Reputation: 37755

Problem in your code is you're not accessing the values properly, j == 'number' && j < 18 here you're comparing with index instead of age

var data=[{name:"Mike",age:12,gender:"male"},{name:"Madeline",age:80,gender:"female"},{name:"Cheryl",age:22,gender:"female"},{name:"Sam",age:30,gender:"male"},{name:"Suzy",age:4,gender:"female"}]


data.forEach(e=> {
  if(e.age >= 18 ) {
    console.log( e.name + " you're 18+" )
  } else {
    console.log( e.name + " Below 18")
  }
})

Upvotes: 0

CertainPerformance
CertainPerformance

Reputation: 371049

Objects don't have a meaningful length. If you want to extract the age property, do that explicitly, eg obj.age:

var peopleWhoWantToSeeMadMaxFuryRoad = [{
  name: "Mike",
  age: 12,
  gender: "male"
}, {
  name: "Madeline",
  age: 80,
  gender: "female"
}, {
  name: "Cheryl",
  age: 22,
  gender: "female"
}, {
  name: "Sam",
  age: 30,
  gender: "male"
}, {
  name: "Suzy",
  age: 4,
  gender: "female"
}]

for (var i = 0; i < peopleWhoWantToSeeMadMaxFuryRoad.length; i++) {
  if (peopleWhoWantToSeeMadMaxFuryRoad[i].age < 18) {
    console.log("person " + peopleWhoWantToSeeMadMaxFuryRoad[i].name + ' is under 18')
  }
}

Or, to be more concise, use an array method and destructure:

var peopleWhoWantToSeeMadMaxFuryRoad = [{
  name: "Mike",
  age: 12,
  gender: "male"
}, {
  name: "Madeline",
  age: 80,
  gender: "female"
}, {
  name: "Cheryl",
  age: 22,
  gender: "female"
}, {
  name: "Sam",
  age: 30,
  gender: "male"
}, {
  name: "Suzy",
  age: 4,
  gender: "female"
}]

peopleWhoWantToSeeMadMaxFuryRoad.forEach(({ name, age }) => {
  if (age < 18) {
    console.log("person " + name + ' is under 18');
  }
});

If you want a new array containing each person object whose age is under 18, use .filter instead of .forEach:

const under18 = peopleWhoWantToSeeMadMaxFuryRoad.filter(({ age}) => age < 18);

Upvotes: 1

Laurens
Laurens

Reputation: 2607

No need for a double for loop, you can achieve this with a single for loop:

for(var i = 0; i < peopleWhoWantToSeeMadMaxFuryRoad.length; i++){
    if(peopleWhoWantToSeeMadMaxFuryRoad[i].age < 18) {
        // Do something for underaged people;
    } else {
       // Do something for people over 18
    }
}

Or you can use the foreach loop:

peopleWhoWantToSeeMadMaxFuryRoad.forEach(function(person) {
    if(person.age < 18) {
        // Do something for underaged people;
    } else {
        // Do something for people over 18
    }
});

Upvotes: 3

Related Questions