为什么.forEach在express.js中的控制器中调用后返回undefined



我有一个数组movies,它包含对象,每个对象都有一个名为avgRating的属性,该属性带有一个浮点或整数。示例:

const movies = [
{
name: 'Rambo I', avgRating: 4.6659
},
{
name: 'Rambo II', avgRating: 3.158
},
{
name: 'Rambo III', avgRating: 3.956
}
];

在util.js文件中,我有一个函数可以将每部电影的avgRatings四舍五入到最接近的0.5或整数:

exports.roundingAvgRating =  (movies) => {
const moviesCopy = [...movies];
return moviesCopy.forEach((movie) => {
if (movie.avgRating === null) {
movie.avgRating = null
} else {
movie.avgRating = Math.round(movie.avgRating * 2) / 2;
}
});
};

问题是,当我调用控制器中的函数时,它会返回undefined。

const { roundingAvgRating } = require('../utils/roundingAvgRatings.js');
const roundedRatings = roundingAvgRating(searchItems)
console.log(roundedRatings) // undefined...why?

您想要映射您的电影,每次都应该在循环中返回电影。像这样:

const movies = [
{
name: 'Rambo I', avgRating: 4.6659
},
{
name: 'Rambo II', avgRating: 3.158
},
{
name: 'Rambo III', avgRating: 3.956
}
];
const roundingAvgRating = (movies) => {

return movies.map((movie) => {
if (movie.avgRating) {
movie.avgRating = Math.round(movie.avgRating * 2) / 2;
}
return movie
});
}

你也不需要在地图上复制

return movies.map((movie) => {
if (movie.avgRating) {
movie.avgRating = Math.round(movie.avgRating * 2) / 2;
}
return movie;
});

最新更新