2

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

6 Answers 6

3

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
    }
});
Sign up to request clarification or add additional context in comments.

Comments

1

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);

Comments

0

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")
  }
})

Comments

0

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)

Comments

0

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`);
})

2 Comments

Array.map generates a new array, it doesn't mutate the original one.
@Titus thanks for that clarification, you are right I did place it into it's own array variable and then I don't know why I said that.
-1

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`));

Comments

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.