У меня есть код json, который я использую с javascript. Мне нужно показать максимальное, минимальное и среднее число сканирований, но с объектами 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,
}
Попробуй это:
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
}
}
Полный ответ будет включать в себя подсчет общего количества сканирований по мере повторения данных, а затем использование этого для расчета среднего значения.
Например, вы можете написать несколько редукторов, которые справятся с этой задачей.
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();
с уменьшением массива..
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.info ('max =', JSON.stringify(Max_JSO) );
console.info ('min =', JSON.stringify(Min_JSO) );
console.info ('Avg =', JSON.stringify(Avg_JSO) );
Хорошее использование аргументов idx и arr, не думал об этом;)
Что вы пытались решить?