Geo*_*Geo 10 javascript arrays loops object
创建一个函数,该函数接受一组人物对象并从数组中返回第一个找到的宇航员对象.
这是我创建的代码;
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]
}
}
Run Code Online (Sandbox Code Playgroud)
我的代码是针对此测试运行的;
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
});
});
});
Run Code Online (Sandbox Code Playgroud)
如何修复代码?
如果ES6是您的选择,ES6引入了实现此目的的新方法:
myArray.find(item => {
return item.isAstronaut
})
Run Code Online (Sandbox Code Playgroud)
甚至更简陋:
myArray.find(item => item.isAstronaut)
Run Code Online (Sandbox Code Playgroud)
find()是新的迭代器的一个,连同filter()与map()和其他与阵列更容易的工作.find()将返回数组中与条件匹配的第一项.的=>或"箭头功能"的意思是,你并不需要明确包括return语句.
您需要使用数组的索引。
Run Code Online (Sandbox Code Playgroud)people[i] // for the object people[i].isAstronaut // for a property of the object
然后您只需要检查是否isAstronaut是true并返回该项目。
在for循环外的最后null,对于未找到的宇航员, return 。
如果您在循环内部进行检查,您将过早返回错误结果。
function findFirstAstronaut(people) {
for (let i = 0; i < people.length; i++) {
if (people[i].isAstronaut) {
return people[i];
}
}
return null;
}
Run Code Online (Sandbox Code Playgroud)