Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
分组或汇总Javascript数组_Javascript_Arrays_Json_Ecmascript 6 - Fatal编程技术网

分组或汇总Javascript数组

分组或汇总Javascript数组,javascript,arrays,json,ecmascript-6,Javascript,Arrays,Json,Ecmascript 6,您好,我想按最高的“order”键对上面的数组进行排序,并返回下面经过过滤的数组。公共密钥是caseID。另外,如果order键为null,则返回它。 我已经搜索和测试了一些函数和循环,但似乎无法得到它。任何帮助都将不胜感激。如果可能的话,我更喜欢es2015。 谢谢大家! var json = [ { id: 11, name:"app1", family:"apps", caseID: 123, order:1 },

您好,我想按最高的“order”键对上面的数组进行排序,并返回下面经过过滤的数组。公共密钥是caseID。另外,如果order键为null,则返回它。 我已经搜索和测试了一些函数和循环,但似乎无法得到它。任何帮助都将不胜感激。如果可能的话,我更喜欢es2015。 谢谢大家!

var json =
[
   {
      id: 11,
      name:"app1",
      family:"apps",
      caseID: 123,
      order:1
   },
   {
      id: 12,
      name:"app1",
      family:"apps",
      caseID: 123,
      order:2
   },
   {
      id: 13,
      name:"app1",
      family:"apps",
      caseID: 123,
      order:3
   },
   {
      id: 14,
      name:"app2",
      family:"tools",
      caseID: 129,
      order:1
   },
   {
      id: 15,
      name:"app2",
      family:"tools",
      caseID: 129,
      order:2
   },
   {
      id: 16,
      name:"app3",
      family:"utils",
      caseID: 120,
      order:1
   },
   {
      id: 17,
      name:"app3",
      family:"utils",
      caseID: 120,
      order:2
   },
      id: 18,
      name:"app3",
      family:"utils",
      caseID: 150,
      order:null
   }
  ] 
你可以试试下面的

方法

  • 创建一个对象,使用唯一的case ID作为键,值作为具有最高顺序的项
  • 按顺序排序
  • //代码在这里
    var json=[{“id”:11,“name”:“app1”,“family”:“apps”,“caseID”:123,“order”:1},{“id”:12,“name”:“app1”,“family”:“apps”,“caseID”:123,“order”:3},{“id”:14,“name”:“app2”,“family”:“tools”,“caseID”:129,“order”:1},{“id”:15,“name”:“app2”,“family”:“tools”,“caseID”:129,“order”:2},{“id”:16,“name”:“app3”,“family”:“utils”,“caseID”:120,“order”:1},{“id”:17,“name”:“app3”,“family”:“utils”,“caseID”:120,“order”:2},{“id”:18,“name”:“app3”,“family”:“utils”,“caseID”:150,“order”:null}];
    var-map={};
    //创建具有最高顺序的唯一案例ID的映射
    json.forEach((项目)=>{
    if(映射[item.caseID]){
    if(映射[item.caseID].orderb.order-a.order);
    控制台日志(结果);
    
    您可以尝试以下操作

    方法

  • 创建一个对象,使用唯一的case ID作为键,值作为具有最高顺序的项
  • 按顺序排序
  • //代码在这里
    var json=[{“id”:11,“name”:“app1”,“family”:“apps”,“caseID”:123,“order”:1},{“id”:12,“name”:“app1”,“family”:“apps”,“caseID”:123,“order”:3},{“id”:14,“name”:“app2”,“family”:“tools”,“caseID”:129,“order”:1},{“id”:15,“name”:“app2”,“family”:“tools”,“caseID”:129,“order”:2},{“id”:16,“name”:app3,“系列”:“utils”,“caseID”:120,“订单”:1},{“id”:17,“名称”:“app3”,“系列”:“utils”,“caseID”:120,“订单”:2},{“id”:18,“名称”:“app3”,“系列”:“utils”,“caseID”:150,“订单”:null}];
    var-map={};
    //创建具有最高顺序的唯一案例ID的映射
    json.forEach((项目)=>{
    if(映射[item.caseID]){
    if(映射[item.caseID].orderb.order-a.order);
    控制台日志(结果);
    
    我将从消除重复开始。您可以使用
    reduce()来实现这一点
    并分配给键入到
    caseID
    的对象。您可以同时避免任何顺序小于您已经看到的顺序的对象。然后您可以根据
    caseID
    获取该散列值,该散列值将是唯一的对象,并像通常一样对它们进行排序。例如:

    var json=[{“id”:11,“name”:“app1”,“family”:“apps”,“caseID”:123,“order”:1},{“id”:12,“name”:“app1”,“family”:“apps”,“caseID”:123,“order”:2},{“id”:13,“name”:“apps”,“caseID”:123,“order”:3},{“id”:14,“name”:“app2”,“family”:“tools”,“caseID”:129,“order”:1},{“id”“:15,“名称”:“app2”,“家族”:“工具”,“案例id”:129,“订单”:2},{“id”:16,“名称”:“app3”,“家族”:“utils”,“案例id”:120,“订单”:1},{“id”:17,“名称”:“app3”,“家族”:“utils”,“案例id”:120,“订单”:2},{“id”:18,“名称”:“app3”,“家族”:“utils”,“案例id”:150,“订单”:null},]
    //仅获取基于caseID的筛选项
    //只挑选最大的
    让filtered=json.reduce((a,c)=>{
    如果(!a[c.caseID]| a[c.caseID][order']b.order-a.order)
    
    console.log(result)
    我将从消除重复开始。您可以使用
    reduce()
    和指定给键入到
    caseID
    的对象来完成此操作。您可以同时避开任何顺序小于您已经看到的顺序的对象。然后,您可以根据
    caseID
    获取该散列的值,该散列将是唯一的对象,并像通常一样对它们进行排序。例如:

    var json=[{“id”:11,“name”:“app1”,“family”:“apps”,“caseID”:123,“order”:1},{“id”:12,“name”:“app1”,“family”:“app”,“caseID”:123,“order”:2},{“id”:13,“name”:“apps”,“caseID”:123,“order”:3},{“id”:14,“name”:“app2”,“family”:“tools”,“caseID”:129,“order”:1},{“id”:15,“名称”:“app2”,“家族”:“工具”,“案例id”:129,“订单”:2},{“id”:16,“名称”:“app3”,“家族”:“utils”,“案例id”:120,“订单”:1},{“id”:17,“名称”:“app3”,“家族”:“utils”,“案例id”:120,“订单”:2},{“id”:18,“名称”:“app3”,“家族”:“utils”,“案例id”:150,“订单”:null},]
    //仅获取基于caseID的筛选项
    //只挑选最大的
    让filtered=json.reduce((a,c)=>{
    如果(!a[c.caseID]| a[c.caseID][order']b.order-a.order)
    console.log(结果)
    在ES6中:

    filtered = 
     [
    
      {
          id: 13,
          name:"app1",
          family:"apps",
          caseID: 123,
          order:3  
       },
       {
          id: 15,
          name:"app2",
          family:"tools",
          caseID: 129,
          order:2
       },
       {
          id: 17,
          name:"app3",
          family:"utils",
          caseID: 120,
          order:2
       },
       {
          id: 18,
          name:"app3",
          family:"utils",
          caseID: 150,
          order:null
       }
      ]
    

    在ES5中:

    json.sort((a, b) => a.caseID > b.caseID);
    let bad_order = json.filter(v => v.order === null);
    let good_order = json.filter(v => v.order !== null);
    
    json.sort(函数(a,b){返回a.caseID>b.caseID;});
    var坏_顺序=[];
    var良好_顺序=[];
    for(var i=0;i
    在ES6中:

    filtered = 
     [
    
      {
          id: 13,
          name:"app1",
          family:"apps",
          caseID: 123,
          order:3  
       },
       {
          id: 15,
          name:"app2",
          family:"tools",
          caseID: 129,
          order:2
       },
       {
          id: 17,
          name:"app3",
          family:"utils",
          caseID: 120,
          order:2
       },
       {
          id: 18,
          name:"app3",
          family:"utils",
          caseID: 150,
          order:null
       }
      ]
    

    在ES5中:

    json.sort((a, b) => a.caseID > b.caseID);
    let bad_order = json.filter(v => v.order === null);
    let good_order = json.filter(v => v.order !== null);
    
    json.sort(函数(a,b){返回a.caseID>b.caseID;});
    var坏_顺序=[];
    var良好_顺序=[];
    for(var i=0;i            var filteredMap = {};
                json.forEach(function (item) {
                    filteredMap[item.caseID] = item;
                });
                var filteredArray = [];
                for (var key in filteredMap) {
                    filteredArray.push(filteredMap[key]);
                }
                console.log(JSON.stringify(filteredArray));
    
    var json =
    [
       {
          id: 11,
          name:"app1",
          family:"apps",
          caseID: 123,
          order:1
       },
       {
          id: 12,
          name:"app1",
          family:"apps",
          caseID: 123,
          order:2
       },
       {
          id: 13,
          name:"app1",
          family:"apps",
          caseID: 123,
          order:3
       },
       {
          id: 14,
          name:"app2",
          family:"tools",
          caseID: 129,
          order:1
       },
       {
          id: 15,
          name:"app2",
          family:"tools",
          caseID: 129,
          order:2
       },
       {
          id: 16,
          name:"app3",
          family:"utils",
          caseID: 120,
          order:1
       },
       {
          id: 17,
          name:"app3",
          family:"utils",
          caseID: 120,
          order:2
       }, {
          id: 18,
          name:"app3",
          family:"utils",
          caseID: 150,
          order:null
       }
     ]
    var obj = {}
    var arr = json.sort(function(a, b) {
      return b.order - a.order
    }).sort(function(a, b) {
      return a.caseId - b.caseId
    }).filter(function(item, index, array){
      return obj.hasOwnProperty(item.caseID) ? false : (obj[item.caseID] = true)
    })
    console.log(arr)