微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决为什么 .forEach 在 express.js 中的控制器中调用后返回 undefined?

我有一个保存对象的数组电影,每个对象都有一个名为 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;
});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。