有没有使用高阶函数来解决这个问题的更短的方法?也许是过滤方法?
返回一个没有列表中最昂贵的东西的新数组。您的函数应保留此数组中项目的顺序。代码是正确的,输出也是如此。我没有很多关于 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);
}
这是假设您当前的代码有效 - 如果有多个项目与相同的最高费用相关,则应删除所有项目。