为什么我使用 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);
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);