我有一个对象阵列(汽车):
var car = [
{speed: 20, color: "red"},
{speed: 5, color: "blue"},
{speed: 80, color: "yellow"},
{speed: 79, name: "orange"}
];
和一个应该返回数组中最快的Car的函数:
function getFastestCar(cars) {
cars.reduce(function (prevFastestCar,curFastestcar) {
if (curFastestcar.speed > prevFastestCar.speed) return curFastestcar;
else return prevFastestCar;
}, {speed: -Infinity, name: "test"});
};
搜索了几个小时后,我找不到任何解决方案,为什么函数返回undefined。我调试了代码并且函数完美地工作,除了在最后的“步骤”它以某种方式取代最快的Car未定义。我试图理解reduce方法背后的概念我知道有更简单的方法可以做到这一点,但我很好奇为什么它不能正常工作。
答案 0 :(得分:3)
答案 1 :(得分:0)
这可能只是个人偏好,但我不喜欢将Array.reduce用于涉及比较的任务。我认为以下内容更容易理解:
const cars = [
{speed: 20, color: "red"},
{speed: 5, color: "blue"},
{speed: 80, color: "yellow"},
{speed: 79, name: "orange"}
];
function getFastestCar(cars) {
var fastestCar = {};
if (cars.length) {
cars.forEach(car => {
fastestCar = fastestCar.speed > car.speed ? fastestCar : car;
});
}
return fastestCar;
}
console.log(getFastestCar(cars));