Javascript JSON按名称分组,然后显示最新记录

Javascript JSON按名称分组,然后显示最新记录,javascript,json,filtering,Javascript,Json,Filtering,仅使用JavaScript,我需要 按代码分组 获取最新的修改日期 将总分组代码显示为计数 开始JSON结果 [ {"ID":1,"code":"AAA","modifieddate":"2019-06-01","user":"John"}, {"ID":2,"code":"AAA","modifieddate":"2019-06-02","user":"Jane"}, {"ID":3,"code":"AAA","modifieddate":"2019-06-03","user":"Sue"},

仅使用JavaScript,我需要

  • 按代码分组
  • 获取最新的修改日期
  • 将总分组代码显示为计数
  • 开始JSON结果

    [
    {"ID":1,"code":"AAA","modifieddate":"2019-06-01","user":"John"},
    {"ID":2,"code":"AAA","modifieddate":"2019-06-02","user":"Jane"},
    {"ID":3,"code":"AAA","modifieddate":"2019-06-03","user":"Sue"},
    {"ID":4,"code":"BBB","modifieddate":"2019-06-10","user":"Rick"},
    {"ID":5,"code":"CCC","modifieddate":"2019-06-11","user":"Joe"}
    ]
    
    [
    {"ID":3,"code":"AAA","modifieddate":"2019-06-03","user":"Sue","Count":"3"},
    {"ID":4,"code":"BBB","modifieddate":"2019-06-10","user":"Rick","Count":"1"},
    {"ID":5,"code":"CCC","modifieddate":"2019-06-11","user":"Joe","Count":"1"}
    ]
    
    所需的JSON结果集

    [
    {"ID":1,"code":"AAA","modifieddate":"2019-06-01","user":"John"},
    {"ID":2,"code":"AAA","modifieddate":"2019-06-02","user":"Jane"},
    {"ID":3,"code":"AAA","modifieddate":"2019-06-03","user":"Sue"},
    {"ID":4,"code":"BBB","modifieddate":"2019-06-10","user":"Rick"},
    {"ID":5,"code":"CCC","modifieddate":"2019-06-11","user":"Joe"}
    ]
    
    [
    {"ID":3,"code":"AAA","modifieddate":"2019-06-03","user":"Sue","Count":"3"},
    {"ID":4,"code":"BBB","modifieddate":"2019-06-10","user":"Rick","Count":"1"},
    {"ID":5,"code":"CCC","modifieddate":"2019-06-11","user":"Joe","Count":"1"}
    ]
    
  • 尝试使用reduce方法
  • 我没有修改服务器端API代码的权限
  • 我使用的是Aurelia JS

  • 您可以使用
    Array.reduce
    按每个项目的
    code
    属性对结果集进行分组,根据需要递增
    Count
    ,然后从累积对象中获取值。在此过程中,我们将执行日期比较,以确定结果中要包含的最新条目

    const data=[{“ID”:1,“code”:“AAA”,“modifieddate”:“2019-06-01”,“user”:“John”},{“ID”:2,“code”:“AAA”,“modifieddate”:“2019-06-02”,“user”:“Jane”},{“ID”:3,“code”:“AAA”,“modifieddate”:“2019-06-03”,“user”:“Sue”},{“ID”:4,“code”:“BBB”,“modifieddateddate”:“2019-06-10”,“user”:“Rick”},{“ID”:5,“code”:“CCC”,“modifieddated”:“2019-06-06-11”,“user”:;
    const result=Object.values(data.reduce)(a,e)=>{
    如果(!a[e.code]){
    a[e.code]={…e,计数:0};
    }
    if(Date.parse(e.modifieddate)>Date.parse(a[e.code].modifieddate)){
    a[e.code]={…e,Count:a[e.code].Count};
    }
    a[e.code].Count++;
    返回a;
    }, {}));
    控制台日志(结果)这应该让您:

    let array = [
      {"ID":1,"code":"AAA","modifieddate":"2019-06-01","user":"John"},
      {"ID":2,"code":"AAA","modifieddate":"2019-06-02","user":"Jane"},
      {"ID":3,"code":"AAA","modifieddate":"2019-06-03","user":"Sue"},
      {"ID":4,"code":"BBB","modifieddate":"2019-06-10","user":"Rick"},
      {"ID":5,"code":"CCC","modifieddate":"2019-06-11","user":"Joe"}
    ]
    let result = array.reduce(function(total, currentValue, currentIndex, arr) {
      let index = total.findIndex(function(entry) { return entry.code == currentValue.code; })
      if (index >= 0) { // entry already exists
        // check modified
        if (total[index].modifieddate > currentValue.modifieddate) { // already have most recent of the two
          total[index].Count += 1;
        } else { // need to replace with more recent
          currentValue.Count = total[index].Count + 1;
          total[index] = currentValue;
        }
      } else { // first record for this code
        currentValue.Count = 1;
        total.push(currentValue);
      }
      return total;
    }, []);
    console.log(result);
    
    这是一张工作票


    注意:注释是在代码块中进行的

    我在本文中没有看到任何关于
    modifieddate
    的内容。OP也想要最新的唱片。对不起,我没听进去。我的输出与OP完全匹配,所以您能澄清差异在哪里吗?尝试更改前三条记录的顺序。你可以先点,然后总是得到正确的结果。好吧,我不太清楚OP的意图是什么,因为这个例子很简单。更新以符合该要求。做得很好。谢谢你,戈伦先生。非常感谢,先生!工作完美。谢谢你,沃森先生。非常感谢,先生!没问题@Brian