Reputation: 21
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
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
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
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
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
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
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