为什么我使用 javascript 的 reduce 函数 return "undefined"

Why does my use of javascript's reduce function return "undefined"

1) 我有一个名为 employees 的对象数组。

2) 我试图找到数组中收入最高的员工。

3) 我正在使用 Javascript 的 reduce 函数(在函数 findHighestPaid 中)来这样做。

4) 运行 findHighestPaid(employees) returns “undefined” 当我期望它 return 具有 属性姓名:阿伯拉尔

这是我的代码。

const employees = [
  {
    name: "Aziz",
    salary: 17050,
  },
  {
    name: "Angela",
    salary: 17060,
  },
  {
    name: "Abelard",
    salary: 17070,
  },
];

function findHighestPaid(arrayOfObjects) {
  let myObject = {
    name: "pretendEmployee",
    salary: 17040,
  };

  arrayOfObjects.reduce(myFunction, myObject);

  function myFunction(acc, item) {
    let personSalary = item.salary;
    let accSalary = acc.salary;
    if (Math.sign(personSalary - accSalary) > 0) {
      console.log(`returning object for ${item.name}`);
      return item;
    } else {
      console.log(`returning object for ${acc.name}`);
      return acc;
    }
  } // end myFunction
}

当我 运行 找到 HighestPaid(employees) 并查看控制台时,我看到:

returnAziz 的对象//(如我所料)

return为 Angela 添加对象//(如我所料)

returnAbelard 的对象//(如我所料)

未定义//(哦哦!!!

为什么reduce函数return“未定义”?

最后打印的 undefined 是您 运行.

findHighestPaid() 函数的 return 值

因为你没有 returning 任何东西它 returning undefined。 如果您的目标是查看 reduce() 的 return 值,请将 return 语句添加到函数中,如下所示:

const employees = [
  {
    name: "Aziz",
    salary: 17050,
  },
  {
    name: "Angela",
    salary: 17060,
  },
  {
    name: "Abelard",
    salary: 17070,
  },
];

function findHighestPaid(arrayOfObjects) {
  let myObject = {
    name: "pretendEmployee",
    salary: 17040,
  };

  return arrayOfObjects.reduce(myFunction, myObject);

  function myFunction(acc, item) {
    let personSalary = item.salary;
    let accSalary = acc.salary;
    if (Math.sign(personSalary - accSalary) > 0) {
      console.log(`returning object for ${item.name}`);
      return item;
    } else {
      console.log(`returning object for ${acc.name}`);
      return acc;
    }
  } // end myFunction
}

console.log(findHighestPaid(employees));

尽管您根本不需要 Math.sign,但您的代码运行良好,只需要 return 结果:

const employees = [
  {
    name: "Aziz",
    salary: 17050,
  },
  {
    name: "Angela",
    salary: 17080,
  },
  {
    name: "Abelard",
    salary: 17070,
  },
];

function findHighestPaid(arrayOfObjects) {
  let myObject = {
    name: "pretendEmployee",
    salary: 17040,
  };

  return arrayOfObjects.reduce(myFunction, myObject);

  function myFunction(acc, item) {
    let personSalary = item.salary;
    let accSalary = acc.salary;
    if (personSalary - accSalary > 0) {
      console.log(`returning object for ${item.name}`);
      return item;
    } else {
      console.log(`returning object for ${acc.name}`);
      return acc;
    }
  } // end myFunction
}

console.log('Highest paid', findHighestPaid(employees));

你只需要这样说

function findHighestPaid(arrayOfObjects) {
    return arrayOfObjects.reduce((prev, curr) => {
        if(!prev) {
            return curr;
        }

        return curr.salary > prev.salary ? curr : prev;    
    }, null);
}

const highestPaidEmployee = findHighestPaid(employees);