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 true
或 false
:
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 值是一个数组。
给出提示的背景(这不是家庭作业,而是有人转发给我的一些问题,以帮助理解如何使用 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 true
或 false
:
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 值是一个数组。