我可以不使用forEach而是使用.reduce来使此函数更简洁吗?

问题描述

我可以不使用forEach()而是使用.reduce()来使此函数更简洁吗? 请吗?

const post = [
  {
    id: "1",dateOfPost: "15.10.2020",postTitle: "...",postText: "...",},comments: [
      {
        id: "1",dateOfComment: "15.10.2020",gravatar: "...",nicName: "...",commentText: "...",starrating: 3,likeCount: 8,dislikeCount: 1
      },{
        id: "2",starrating: 5,likeCount: 1,]
  }
];

const postComments = post[0].comments;
const starratingAverage = () => {
  let starratingAVG = 0;
  postComments.forEach(comment => {
    starratingAVG = starratingAVG + comment.starrating
  })
  return starratingAVG = starratingAVG / postComments.length;
}

我只是一个初学者,我正在训练正确的方法。所以我会 感谢您的所有帮助。谢谢。

解决方法

您可以使用-- Logic for all years on which Christmas falls on Sunday UPDATE WORKDAYFLAG SET WORKDAYFLAG='N' WHERE YEAR(CALENDAR_DATE) IN (SELECT YEAR(CALENDAR_DATE) FROM WORKDAYFLAG WHERE DAY(CALENDAR_DATE)=25 AND MONTH(CALENDAR_DATE)=12 AND DATENAME(WEEKDAY,CALENDAR_DATE) = 'Sunday' ) AND MONTH(CALENDAR_DATE)=12 AND DAY(CALENDAR_DATE) IN (23,26) ; -- Logic for all year on which Christmas falls on Saturday UPDATE WORKDAYFLAG SET WORKDAYFLAG='N' WHERE YEAR(CALENDAR_DATE) IN (SELECT YEAR(CALENDAR_DATE) FROM WORKDAYFLAG WHERE DAY(CALENDAR_DATE)=25 AND MONTH(CALENDAR_DATE)=12 AND DATENAME(WEEKDAY,CALENDAR_DATE) = 'Saturday' ) AND MONTH(CALENDAR_DATE)=12 AND DAY(CALENDAR_DATE) IN (24,25) ; 获得starRating的总和,并使用Array.reduce将平均值映射到posts的每个元素。

Array.map

,

是的。替换为:

const post = [{
  id: "1",dateOfPost: "15.10.2020",postTitle: "...",postText: "...",comments: [{
      id: "1",dateOfComment: "15.10.2020",gravatar: "...",nicName: "...",commentText: "...",starRating: 3,likeCount: 8,dislikeCount: 1
    },{
      id: "2",starRating: 5,likeCount: 1,]
}];

const output = post.map(({ comments }) => (comments.length > 0 ? comments.reduce((acc,cur) => acc + cur.starRating,0) / comments.length : 0));
console.log(output);

与此:

  let starRatingAVG = 0;
  postComments.forEach(comment => {
    starRatingAVG = starRatingAVG + comment.starRating
  })