是否有可能减少我的代码了?

问题描述 投票:1回答:2

这是我的代码。

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()来完成此操作吗?

javascript dry
2个回答
6
投票

您可以通过仅迭代数组一次来创建所需的结果,这可以使用.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));

仍然,您的当前代码对我来说还不错。


0
投票

要在最后真正回答您的问题,是的-只能通过filtermap中的一个来完成,但是,它不会按预期使用filtermap,而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));
© www.soinside.com 2019 - 2024. All rights reserved.