这是我的代码。
function legalPeopleToDrive(people) {
const myFilter = people
.filter(p => p.age > 14)
.map(p => {
return p.name;
});
return myFilter;
}
const myObj = [
{ name: "John", age: 14 },
{ name: "Jim", age: 16 },
{ name: "Ben", age: 18 }
];
console.log(legalPeopleToDrive(myObj));
[相当,我真的很好奇,看看是否有可能再减少这个数目。可以仅使用以下方法之一filter()
或map()
来完成此操作吗?
您可以通过仅迭代数组一次来创建所需的结果,这可以使用.reduce
完成。您还可以立即返回对数组方法的调用-无需事先将其存储在变量中。另一个选择是使用箭头函数来简化返回:
const legalPeopleToDrive = people => people.reduce((a, p) => {
if (p.age > 14) a.push(p.name);
return a;
}, []);
const myObj = [
{ name: "John", age: 14 },
{ name: "Jim", age: 16 },
{ name: "Ben", age: 18 }
];
console.log(legalPeopleToDrive(myObj));
仍然,您的当前代码对我来说还不错。
要在最后真正回答您的问题,是的-只能通过filter
或map
中的一个来完成,但是,它不会按预期使用filter
或map
,而reduce
或在这种情况下,建议使用foreach
。
const legalPeopleToDrive = people => {
const a = [];
people.map(p => {
if (p.age > 14) {
a.push(p.name);
}
});
return a;
}
// An uber-short form would be:
// let legalPeopleToDrive = (people, a = []) => (people.map(p => p.age > 14 && a.push(p.name)), a);
const myObj = [
{ name: "John", age: 14 },
{ name: "Jim", age: 16 },
{ name: "Ben", age: 18 }
];
console.log(legalPeopleToDrive(myObj));