减少未定义的回报

时间:2017-05-12 16:10:23

标签: javascript undefined reduce

我有一个对象阵列(汽车):

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方法背后的概念我知道有更简单的方法可以做到这一点,但我很好奇为什么它不能正常工作。

2 个答案:

答案 0 :(得分:3)

您需要return函数中减少的值。

return cars.reduce(..);

请参阅reduce的说明。

  

返回值

     

减少产生的价值。

答案 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));