如何在JavaScript中从数组返回一个对象

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)

如何修复代码?

Tob*_*oby 6

如果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语句.

阅读有关ES6迭代器的更多信息.


Nin*_*olz 5

您需要使用数组的索引。

people[i]                // for the object
people[i].isAstronaut    // for a property of the object
Run Code Online (Sandbox Code Playgroud)

然后您只需要检查是否isAstronauttrue并返回该项目。

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)


ell*_*sis 5

一班轮

arr.filter(item => item.isAstronaut)[0]
Run Code Online (Sandbox Code Playgroud)