JavaScript 中带有对象的本机过滤器?

Native filter in JavaScript with objects?

给出提示的背景(这不是家庭作业,而是有人转发给我的一些问题,以帮助理解如何使用 HOF 并正确实施它们,因此欢迎所有解释以及解决问题的不同方法):

a) 实现一个 findPerson 方法,该方法将人员数组和名称字符串作为目标。每个人的对象都是结构化的:

{name: 'Erika', gender: 'Female'}

用法示例:

findPerson(people, 'Erika') // -> {name: 'Erika', gender: 'Female'}
Constraint: Use filter

我的对象数组如下:

var people = [
  {
    name: 'Max',
    gender: 'Trans'
  },
  {
    name: 'Sue',
    gender: 'Female'
  },
  {
    name: 'Jake',
    gender: 'Male'
  },
  {
    name: 'John',
    gender: 'Male'
  },
  {
    name: 'Erika',
    gender: 'Female'
  }
];

到目前为止我构建的代码是这样的:

    const findPerson = (people, name) => {
       people.filter(function(person) {
         if(person.name === name){}
        return person;
       });
    };

问题是我 运行 陷入了这个错误,如下所示: 应该 return 一个对象 ‣TypeError: Cannot read 属性 'should' of undefined

应该return正确的对象‣TypeError:无法读取属性 'should' of undefined

如果有人可以帮助我指出正确的方向,告诉我如何按照我的逻辑解决这个问题,我的代码哪里出了问题?

filter 函数应该 return truefalse:

var people = [
  {name: 'Max', gender: 'Trans'},
  {name: 'Sue', gender: 'Female'},
  {name: 'Jake', gender: 'Male'},
  {name: 'John', gender: 'Male'},
  {name: 'Erika', gender: 'Female'}
];

const findPerson = (people, find) => people.filter(({name}) => name === find)[0];

console.log(findPerson(people, 'Erika'))

const people = [{
    name: 'Max',
    gender: 'Trans'
  },
  {
    name: 'Sue',
    gender: 'Female'
  },
  {
    name: 'Jake',
    gender: 'Male'
  },
  {
    name: 'John',
    gender: 'Male'
  },
  {
    name: 'Erika',
    gender: 'Female'
  }
];

const findPerson = (persons, name) => {
  return persons.filter((person) => person.name === name);
};

console.log(findPerson(people, 'Erika')[0]);

您的代码的问题是您没有 return调用 filter.
的值 filter在它有运行之后,return是一个数组。 returned 数组将包含被过滤掉的值。

我这样做了:findPerson(people, 'Erika')[0] 到 select 数组中的第一项,因为 filter 的 return 值是一个数组。