【问题标题】:Reduce returns undefined减少退货未定义
【发布时间】:2017-05-13 00:26:41
【问题描述】:

我有一个对象数组(汽车):

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"});
};

搜索了几个小时后,我找不到函数返回未定义的任何解决方案。我调试了代码并且该函数工作得非常好,除了在最后一个“步骤”中它以某种方式用未定义的方式替换了最快的 Car。我试图理解 reduce 方法背后的概念我知道有更简单的方法可以做到这一点,但我很好奇为什么它不能正常工作。

【问题讨论】:

  • 我认为您只是缺少函数中的return
  • 附带说明,使用 lodash 之类的库可能会让您感觉更舒服。您可以像这样const max = _.maxBy(cars, car => car.speed); 实现这一目标。我为你创建了一个plunk

标签: javascript undefined reduce


【解决方案1】:

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

return cars.reduce(..);

查看reduce的描述。

返回值

减少产生的值。

【讨论】:

    【解决方案2】:

    这可能只是个人喜好,但我不喜欢将 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));

    【讨论】:

      猜你喜欢
      • 2020-12-08
      • 2016-11-06
      • 2012-10-04
      • 2013-07-11
      • 2018-08-15
      • 2016-06-23
      • 1970-01-01
      • 2021-04-27
      • 2011-03-30
      相关资源
      最近更新 更多