Цикл массива в массиве для определения значения - PullRequest
0 голосов
/ 27 января 2019

Мне нужно пройтись по следующему массиву, используя цикл for, и определить, является ли возраст людей 18 лет или старше, или если они моложе 18 лет, и записать строку соответствующим образом.

Я пробовал несколько разныхтакие вещи:

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

Но я не могу этого понять.Любая помощь будет признательна

Ответы [ 6 ]

0 голосов
/ 27 января 2019

Вы можете отобразить логическое значение для каждого человека, отфильтровать по логическому, а затем выполнить итерацию по оставшемуся массиву для регистрации.

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`);
})
0 голосов
/ 27 января 2019

Использование 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)
0 голосов
/ 27 января 2019

Рекомендуется использовать Array Filter , чтобы избавиться от всех 18 или более, затем зациклить оставшиеся и распечатать console.log.

const peopleWhoWantToSeeMadMaxFuryRoad = [..];

peopleWhoWantToSeeMadMaxFuryRoad.filter(person => person.age < 18)
    .forEach(person => console.log(`${person.name} is under 18`));
0 голосов
/ 27 января 2019

Проблема в вашем коде в том, что вы неправильно обращаетесь к значениям, j == 'number' && j < 18 здесь вы сравниваете индекс с возрастом

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")
  }
})
0 голосов
/ 27 января 2019

Объекты не имеют значения length.Если вы хотите извлечь свойство age, сделайте это явно, например, 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')
  }
}

Или, если быть более кратким, использовать метод массива и деструктурировать:

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

Если вы хотите новый массив, содержащий каждый объект person, возраст которого не достиг 18 лет, используйте .filter вместо .forEach:

const under18 = peopleWhoWantToSeeMadMaxFuryRoad.filter(({ age}) => age < 18);
0 голосов
/ 27 января 2019

Нет необходимости в двойном цикле for, этого можно добиться с помощью одного цикла for:

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

Или вы можете использовать цикл foreach:

peopleWhoWantToSeeMadMaxFuryRoad.forEach(function(person) {
    if(person.age < 18) {
        // Do something for underaged people;
    } else {
        // Do something for people over 18
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...