Créez une fonction qui prend un tableau d'objets de personnes et renvoie le premier objet astronaute trouvé dans le tableau.
C'est le code que j'ai créé;
function findFirstAstronaut(people) {
for (let i = 0; i < people.length; i++) {
if (people.astronaut[i] === false) {
return null
}
else if (people.astronaut[i]) {
return people[i]
}
}
Mon code est exécuté contre ce test.
describe("findFirstAstronaut", () => {
it("returns null if no Astronaut is in the array", () => {
expect(findFirstAstronaut([])).to.be.null;
});
it("returns a person object who is an astronaut", () => {
const astronaut = { name: "Tim Peake", isAstronaut: true };
expect(findFirstAstronaut([astronaut])).to.have.keys([
"name",
"isAstronaut"
]);
expect(findFirstAstronaut([astronaut]).isAstronaut).to.be.true;
});
it("returns the first astronaut from the array", () => {
const astronauts = [
{ name: "Johnny Karate", isAstronaut: false },
{ name: "Neil Armstrong", isAstronaut: true },
{ name: "Valentina Tereshkova", isAstronaut: true },
{ name: "Bert Macklin", isAstronaut: false },
{ name: "Eileen Collins", isAstronaut: true },
{ name: "Kip Hackman", isAstronaut: false }
];
expect(findFirstAstronaut(astronauts)).to.eql({
name: "Neil Armstrong",
isAstronaut: true
});
});
});
Comment puis-je réparer mon code?
Vous devez utiliser l'index pour le tableau.
people[i] // for the object people[i].isAstronaut // for a property of the object
Il vous suffit ensuite de vérifier si isAstronaut
est true
et de le renvoyer avec l'élément.
À la fin de la boucle for
, retournez null
pour un astronaute introuvable.
Si vous vérifiez à l'intérieur de la boucle, vous retournerez trop tôt avec un résultat erroné.
function findFirstAstronaut(people) {
for (let i = 0; i < people.length; i++) {
if (people[i].isAstronaut) {
return people[i];
}
}
return null;
}
ES6 introduit un nouveau moyen d'y parvenir, si ES6 est une option pour vous:
myArray.find(item => {
return item.isAstronaut
})
Ou encore plus abrégé:
myArray.find(item => item.isAstronaut)
find()
est l’un des nouveaux itérateurs, avec filter()
et map()
et d’autres pour travailler plus facilement avec des tableaux. find()
retournera le premier élément de votre tableau qui correspond à la condition. =>
ou "fonction de flèche" signifie qu'il n'est pas nécessaire d'inclure explicitement l'instruction return.
Bon mot
arr.filter(item => item.isAstronaut)[0]
Vous pouvez simplement filtrer les éléments de tableau ayant une propriété isAstronaut
égale à false à l'aide de Array.prototype.filter
. Je préfère filter
à Array.prototype.find
car ES6 n'est pas pris en charge par tous les navigateurs.
Une fois que vous avez le tableau filtré, prenez simplement l'élément à la position d'indexation 0
. Quelque chose comme ci-dessous:
const astronauts = [{
name: "Johnny Karate",
isAstronaut: false
},
{
name: "Neil Armstrong",
isAstronaut: true
},
{
name: "Valentina Tereshkova",
isAstronaut: true
},
{
name: "Bert Macklin",
isAstronaut: false
},
{
name: "Eileen Collins",
isAstronaut: true
},
{
name: "Kip Hackman",
isAstronaut: false
}
];
//Array destructuring to get the first astronaut:
var [firstAstronautFound] = astronauts.filter(el => el.isAstronaut);
//Line above is same as doing this:
//var firstAstronautFound = astronauts.filter(el => el.isAstronaut)[0];
console.log(firstAstronautFound.name);
Tout d’abord, vous devrez peut-être vérifier s’il existe un élément dans le tableau ou renvoyer null.
Deuxièmement, vous devez vérifier la propriété
Troisièmement, vous devez vérifier la valeur de la propriété isAstronaut
function findFirstAstronaut(people) {
if (people.length > 0)
{
for (let i = 0; i < people.length; i++) {
if (("name" in people[i]) && ("isAstronaut" in people[i])) {
if (people[i].isAstronaut)
return people[i];
else
return true;
}
}
}
else
return null;
}