问题描述
我可以不使用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
})