使用max,min和avg javascript获取json对象

时间:2019-04-09 23:02:01

标签: javascript json

我有一些与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,
}

3 个答案:

答案 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();