Javascript 为什么.forEach在express.js中在我的控制器中调用后返回未定义?
我有一个包含对象的数组,每个对象都有一个名为avgRating的属性,带有一个浮点数或整数。例如:Javascript 为什么.forEach在express.js中在我的控制器中调用后返回未定义?,javascript,node.js,express,foreach,Javascript,Node.js,Express,Foreach,我有一个包含对象的数组,每个对象都有一个名为avgRating的属性,带有一个浮点数或整数。例如: const movies = [ { name: 'Rambo I', avgRating: 4.6659 }, { name: 'Rambo II', avgRating: 3.158 }, { name: 'Rambo III', avgRating: 3.956 } ]; 在util.js文件中,我有一个函数,可以将每部电影的AVG四舍五入到
const movies = [
{
name: 'Rambo I', avgRating: 4.6659
},
{
name: 'Rambo II', avgRating: 3.158
},
{
name: 'Rambo III', avgRating: 3.956
}
];
在util.js文件中,我有一个函数,可以将每部电影的AVG四舍五入到最接近的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
});
}
另外,您不需要在map中进行复制,forEach将不会返回任何您希望它返回的内容?因为总是返回未定义的内容。我希望在运行const roundedRatings=roundingAvgRatingsearchItems时,然后roundedRatings应该是具有圆角的数组avgRatings@Lomono-听起来像您想要的:movies=>movies.map{avgRating}=>avgRating==null?空:Math.roundavgRating*2/2;
return movies.map((movie) => {
if (movie.avgRating) {
movie.avgRating = Math.round(movie.avgRating * 2) / 2;
}
return movie;
});