与具有javascript的对象具有最高价值的不同日期

时间:2018-08-27 11:32:08

标签: javascript json

我有这样的东西:

data = [
  {
    DateMeasured:"2018-08-27T04:46:25",
    Steps:100
  },
  {
    DateMeasured:"2018-08-27T04:46:25",
    Steps:500
  },
  {
    DateMeasured:"2018-08-27T04:46:25",
    Steps:800
  },
{
    DateMeasured:"2018-08-26T04:46:25",
    Steps:400
  },
{
    DateMeasured:"2018-08-26T04:46:25",
    Steps:300
  },
{
    DateMeasured:"2018-08-25T04:46:25",
    Steps:100
  }
];

我有一个像上面这样的数据对象,现在我想用日期不一但步调最高的对象重新创建对象,但是现在我想要这样:

data = [
  {
    DateMeasured:"2018-08-27T04:46:25",
    Steps:800
  },
{
    DateMeasured:"2018-08-26T04:46:25",
    Steps:400
  },
{
    DateMeasured:"2018-08-25T04:46:25",
    Steps:100
  }
];

我如何实现这个目标?

2 个答案:

答案 0 :(得分:0)

如果您需要按步骤数排序并采用前3个元素:

const data = [ { DateMeasured:"2018-08-27T04:46:25", Steps:100 }, { DateMeasured:"2018-08-27T04:46:25", Steps:500 }, { DateMeasured:"2018-08-27T04:46:25", Steps:800 }, { DateMeasured:"2018-08-26T04:46:25", Steps:400 }, { DateMeasured:"2018-08-26T04:46:25", Steps:300 }, { DateMeasured:"2018-08-25T04:46:25", Steps:100 } ];

const sorted = data.sort((a, b) => b.Steps - a.Steps)
const takeFirst3 = sorted.slice(0, 3)

console.log(takeFirst3)

答案 1 :(得分:0)

您可以通过检查最后插入的具有相同日期的对象来缩小数组,如果找不到,则插入对象,否则检查该值并使用更大的Step属性更新数组。

var data = [{ DateMeasured: "2018-08-27T04:46:25", Steps: 100 }, { DateMeasured: "2018-08-27T04:46:25", Steps: 500 }, { DateMeasured: "2018-08-27T04:46:25", Steps: 800 }, { DateMeasured: "2018-08-26T04:46:25", Steps: 400 }, { DateMeasured: "2018-08-26T04:46:25", Steps: 300 }, { DateMeasured: "2018-08-25T04:46:25", Steps: 100 }],
    result = data.reduce((r, o) => {
        var index = r.findIndex(({ DateMeasured }) => DateMeasured === o.DateMeasured);
        if (index === -1) {
            r.push(o);
            return r;
        }
        if (r[index].Steps < o.Steps) {
            r[index] = o;
        }
        return r;
    }, []);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }