有没有使用高阶函数来解决这个问题的更短的方法?也许是过滤方法?

返回一个没有列表中最昂贵的东西的新数组。您的函数应保留此数组中项目的顺序。代码是正确的,输出也是如此。我没有很多关于 HOF 的 exp,所以我想看看如何使用 filter 方法来完成。

    function removeMostExpensive(list) {
  var expensive = list[0];
  for (var i = 1; i < list.length; i++) {
    if (list[i].price > expensive.price) {
      expensive = list[i];
    }
  }
  var newList = [];
  for (var i = 0; i < list.length; i++) {
    if (list[i] !== expensive) {
          newList.push(list[i]);
    }
  }
  return newList;
}
console.log(removeMostExpensive([
  {
    item: "rice",
    price: 12.75,
    weightInPounds: 20
  },
  {
    item: "chicken",
    price: 6.99,
    weightInPounds: 1.25
  },
  {
    item: "celery",
    price: 3.99,
    weightInPounds: 2
  },
  {
    item: "carrots",
    price: 2.85,
    weightInPounds: 2
  },
  {
    item: "green beans",
    price: 2.55,
    weightInPounds: 2
  }
]));

回答

您可以通过将数组映射到价格并调用Math.max它来找到最昂贵的商品。然后通过迭代的当前项目是否具有该价格来过滤数组:

function removeMostExpensive(list) {
    const max = Math.max(...list.map(obj => obj.price));
    return list.filter(obj => obj.price !== max);
}

这是假设您当前的代码有效 - 如果有多个项目与相同的最高费用相关,则应删除所有项目。


以上是有没有使用高阶函数来解决这个问题的更短的方法?也许是过滤方法?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>