【发布时间】:2021-05-16 11:01:17
【问题描述】:
我需要计算average 和max 的评分。
从我的角度来看,这应该使用 map 和 reduce 来实现此目的,但是,我不确定 JSON 是否具有正确的格式,或者它是否需要任何清理。
const
myJSON =
[ { "page": 1, "totalPages": 2, "data":
[ { "title": "Developer 1", "rating": 4.7}
, { "title": "Developer 2", "rating": 7.8}
] } ]
;
var Max_JSO = myJSON.reduce( (acc, cur )=> ((acc.rating > cur.rating)? acc : cur) );
var Min_JSO = myJSON.reduce( (acc, cur )=> ((acc.rating < cur.rating)? acc : cur) );
var Avg_JSO = myJSON.reduce( (acc, cur, idx, arr )=> {
let
sum = acc.rating + cur.rating,
no = idx +1;
if (no === arr.length) { sum = sum / no };
return { 'name': cur.name, 'rating': sum }
});
console.log ('max =', Max_JSO)
console.log ('min =', Min_JSO)
max = { page: 1, totalPages: 2, data:
[ { title: 'Developer 1', rating: 4.7 }
, { title: 'Developer 2', rating: 7.8 }
]
}
min = { page: 1, totalPages: 2, data:
[ { title: 'Developer 1', rating: 4.7}
, { title: 'Developer 2', rating: 7.8}
]
}
我现在正在使用这段代码,但我得到一个奇怪的字符串作为输出:
"max =", "{\"page\":1,\"totalPages\":5,\"data\":[{\"title\":\"Developer 1\",\"rating\":4.7},{\"title\":\"Developer 2\",\"rating\":7.8}]}"
"min =", "{\"page\":1,\"totalPages\":5,\"data\":[{\"title\":\"Developer 1\",\"rating\":4.7},{\"title\":\"Developer 2\",\"rating\":7.8}]}"
有没有更好的办法?
另外,我不仅需要从data 键中读取rating,还需要在它之外读取,正如您在var myJSON 上看到的那样
像这样生成json:
{
"Developer 1": 4.7,
"Developer 2": 7.8,
}
MIN 是 Developer 1 和 MAX Developer 2
【问题讨论】:
-
您想要每个页面或整个 myJSON 数组的最大和最小评分吗?
-
请提供一个更好的输入和输出示例。如果您想要整个
myJSON数组或myJSON数组中的每个对象都有一个最大值,这里很难理解。平均值和最小值也是如此。 -
你的标题是平均和最大评级,你的代码是最小和最大评级逻辑在哪里?
-
不清楚你到底想要什么......
-
在计算
max和min时。条件不应该是myJSON[0].data.reduce而不是myJSON.reduce就像myJSON[0].data.reduce((acc, cur) => (acc.rating > cur.rating ? acc : cur));
标签: javascript json api