我有一些与javascript一起使用的json代码。我需要显示扫描次数的最大值,最小值和平均值,但要显示json对象。
这是我的json示例:
{
'name': 'same',
'scans': 3674,
'date': '2003-02-01'
},
{
'name': 'same',
'scans': 8347,
'date': '2005-12-03'
},
{
'name': 'same',
'scans': 6876,
'date': '2014-03-06'
}
max的结果应为:
{
'name': 'same',
'scans': 8347,
'date': '2005-12-03'
}
min的结果应为:
{
'name': 'same',
'scans': 3674,
'date': '2003-02-01'
}
平均结果应为:
{
'name': 'same',
'scans': 6299,
}
答案 0 :(得分:1)
带有数组reduce ..
var myJSON = [
{ 'name': 'same', 'scans': 3674, 'date': '2003-02-01' }
, { 'name': 'same', 'scans': 8347, 'date': '2005-12-03' }
, { 'name': 'same', 'scans': 6876, 'date': '2014-03-06' }
];
var Max_JSO = myJSON.reduce( (acc, cur )=> ((acc.scans > cur.scans)? acc : cur) );
var Min_JSO = myJSON.reduce( (acc, cur )=> ((acc.scans < cur.scans)? acc : cur) );
var Avg_JSO = myJSON.reduce( (acc, cur, idx, arr )=> {
let
sum = acc.scans + cur.scans,
no = idx +1;
if (no === arr.length) { sum = sum / no };
return { 'name': cur.name, 'scans': sum }
});
console.log ('max =', JSON.stringify(Max_JSO) );
console.log ('min =', JSON.stringify(Min_JSO) );
console.log ('Avg =', JSON.stringify(Avg_JSO) );
答案 1 :(得分:0)
尝试一下:
function maxScans(jsonData) {
let max = jsonData[0].scans;
for (let i = 1; i < jsonData.length; i ++) {
if (jsonData[i].scans > maxScans) maxScans = jsonData[i]
}
return {
name: jsonData[0].name,
scans: max
}
}
完整的答案将涉及在遍历数据时计算总扫描次数,然后使用该次数来计算平均值。
答案 2 :(得分:0)
例如,您可以编写一些可以处理该任务的减速器。
const json = [
{
name: 'same',
scans: 3674,
date: '2003-02-01',
},
{
name: 'same',
scans: 8347,
date: '2005-12-03',
},
{
name: 'same',
scans: 6876,
date: '2014-03-06',
},
];
const max = json.reduce((acc, obj) => {
if (!acc || obj.scans > acc.scans) {
return obj;
}
return acc;
});
const min = json.reduce((acc, obj) => {
if (!acc || obj.scans < acc.scans) {
return obj;
}
return acc;
});
const avg = json
.reduce(
(acc, obj) => {
return {
...acc,
name: obj.name,
value: acc.value + obj.scans,
count: acc.count + 1,
};
},
{
value: 0,
name: '',
count: 0,
exec() {
return {
name: this.name,
scans: this.value / this.count,
};
},
},
)
.exec();