Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么.forEach在express.js中在我的控制器中调用后返回未定义?_Javascript_Node.js_Express_Foreach - Fatal编程技术网

Javascript 为什么.forEach在express.js中在我的控制器中调用后返回未定义?

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四舍五入到

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

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