Javascript 根据angularjs中的键和最新时间戳键过滤json

Javascript 根据angularjs中的键和最新时间戳键过滤json,javascript,angularjs,json,Javascript,Angularjs,Json,我有一个JSON文件,它是从远程api获取的,包含不同的应用程序名称、时间戳以及其他细节。我需要用两个过滤器过滤这个json,即App name+latest timestamp。json文件如下所示: { "data": [ { "appDetails": [ { "appDescription": [ { "appName": "

我有一个JSON文件,它是从远程api获取的,包含不同的应用程序名称、时间戳以及其他细节。我需要用两个过滤器过滤这个json,即App name+latest timestamp。json文件如下所示:

{
    "data": [
        {
          "appDetails": [
            {
              "appDescription": [
                {
                  "appName": "App 1",
                  "timeStamp": "2018-05-28T00:01:01.001Z",
                  "GitTag": "RELEASE-1.0.1.24",
                  "blocker": 3,
                  "critical": 4,
                  "major": 30,
                  "minor": 3,
                  "UnitTestsTotal": 59,
                  "FailedTests": 0,
                  "CodeCoverage": 90
                },
                {
                  "appName": "App 1",
                  "timeStamp": "2018-05-27T00:01:01.001Z",
                  "GitTag": "RELEASE-1.0.1.23",
                  "blocker": 3,
                  "critical": 4,
                  "major": 30,
                  "minor": 3,
                  "UnitTestsTotal": 59,
                  "FailedTests": 0,
                  "CodeCoverage": 90
                },
                {
                  "appName": "App 2",
                  "timeStamp": "2018-05-26T00:01:01.001Z",
                  "GitTag": "RELEASE-1.0.1.22",
                  "blocker": 3,
                  "critical": 4,
                  "major": 30,
                  "minor": 3,
                  "UnitTestsTotal": 59,
                  "FailedTests": 0,
                  "CodeCoverage": 90
                },
                {
                  "appName": "App 2",
                  "timeStamp": "2018-05-28T00:01:01.001Z",
                  "GitTag": "RELEASE-1.0.1.3",
                  "blocker": 3,
                  "critical": 4,
                  "major": 30,
                  "minor": 3,
                  "UnitTestsTotal": 59,
                  "FailedTests": 0,
                  "CodeCoverage": 90
                },
                {
                  "appName": "App 2",
                  "timeStamp": "2018-05-26T00:01:01.001Z",
                  "GitTag": "RELEASE-1.0.1.2",
                  "blocker": 3,
                  "critical": 4,
                  "major": 30,
                  "minor": 3,
                  "UnitTestsTotal": 59,
                  "FailedTests": 0,
                  "CodeCoverage": 90
                },
                {
                  "appName": "App 3",
                  "timeStamp": "2018-05-27T00:01:01.001Z",
                  "GitTag": "RELEASE-1.0.0.9",
                  "blocker": 3,
                  "critical": 4,
                  "major": 30,
                  "minor": 3,
                  "UnitTestsTotal": 59,
                  "FailedTests": 0,
                  "CodeCoverage": 90
                },
                {
                  "appName": "App 3",
                  "timeStamp": "2018-05-25T00:01:01.001Z",
                  "GitTag": "RELEASE-1.0.0.8",
                  "blocker": 3,
                  "critical": 4,
                  "major": 30,
                  "minor": 3,
                  "UnitTestsTotal": 59,
                  "FailedTests": 0,
                  "CodeCoverage": 90
                },
                {
                  "appName": "App 4",
                  "timeStamp": "2018-05-28T00:01:01.001Z",
                  "GitTag": "RELEASE-1.1.1.8",
                  "blocker": 3,
                  "critical": 4,
                  "major": 30,
                  "minor": 3,
                  "UnitTestsTotal": 59,
                  "FailedTests": 0,
                  "CodeCoverage": 90
                },
                {
                  "appName": "App 4",
                  "timeStamp": "2018-05-25T00:01:01.001Z",
                  "GitTag": "RELEASE-1.1.1.6",
                  "blocker": 3,
                  "critical": 4,
                  "major": 30,
                  "minor": 3,
                  "UnitTestsTotal": 59,
                  "FailedTests": 0,
                  "CodeCoverage": 90
                }
              ]
            }
          ]
        }
      ]
    }
var myApp = angular.module('myApp', []);

function MyCtrl($scope) {

  $scope.tableData = [{
              "appName": "App 1",
              "timeStamp": "2018-05-28T00:01:01.001Z",
              "GitTag": "RELEASE-1.0.1.24",
              "blocker": 3,
              "critical": 4,
              "major": 30,
              "minor": 3,
              "UnitTestsTotal": 59,
              "FailedTests": 0,
              "CodeCoverage": 90
            },
            {
              "appName": "App 1",
              "timeStamp": "2018-05-27T00:01:01.001Z",
              "GitTag": "RELEASE-1.0.1.23",
              "blocker": 3,
              "critical": 4,
              "major": 30,
              "minor": 3,
              "UnitTestsTotal": 59,
              "FailedTests": 0,
              "CodeCoverage": 90
            },
            {
              "appName": "App 2",
              "timeStamp": "2018-05-26T00:01:01.001Z",
              "GitTag": "RELEASE-1.0.1.22",
              "blocker": 3,
              "critical": 4,
              "major": 30,
              "minor": 3,
              "UnitTestsTotal": 59,
              "FailedTests": 0,
              "CodeCoverage": 90
            },
            {
              "appName": "App 2",
              "timeStamp": "2018-05-28T00:01:01.001Z",
              "GitTag": "RELEASE-1.0.1.3",
              "blocker": 3,
              "critical": 4,
              "major": 30,
              "minor": 3,
              "UnitTestsTotal": 59,
              "FailedTests": 0,
              "CodeCoverage": 90
            },
            {
              "appName": "App 2",
              "timeStamp": "2018-05-26T00:01:01.001Z",
              "GitTag": "RELEASE-1.0.1.2",
              "blocker": 3,
              "critical": 4,
              "major": 30,
              "minor": 3,
              "UnitTestsTotal": 59,
              "FailedTests": 0,
              "CodeCoverage": 90
            },
            {
              "appName": "App 3",
              "timeStamp": "2018-05-27T00:01:01.001Z",
              "GitTag": "RELEASE-1.0.0.9",
              "blocker": 3,
              "critical": 4,
              "major": 30,
              "minor": 3,
              "UnitTestsTotal": 59,
              "FailedTests": 0,
              "CodeCoverage": 90
            },
            {
              "appName": "App 3",
              "timeStamp": "2018-05-25T00:01:01.001Z",
              "GitTag": "RELEASE-1.0.0.8",
              "blocker": 3,
              "critical": 4,
              "major": 30,
              "minor": 3,
              "UnitTestsTotal": 59,
              "FailedTests": 0,
              "CodeCoverage": 90
            },
            {
              "appName": "App 4",
              "timeStamp": "2018-05-28T00:01:01.001Z",
              "GitTag": "RELEASE-1.1.1.8",
              "blocker": 3,
              "critical": 4,
              "major": 30,
              "minor": 3,
              "UnitTestsTotal": 59,
              "FailedTests": 0,
              "CodeCoverage": 90
            },
            {
              "appName": "App 4",
              "timeStamp": "2018-05-25T00:01:01.001Z",
              "GitTag": "RELEASE-1.1.1.6",
              "blocker": 3,
              "critical": 4,
              "major": 30,
              "minor": 3,
              "UnitTestsTotal": 59,
              "FailedTests": 0,
              "CodeCoverage": 90
            }

  ]

  $scope.appNames = Array.from(new Set($scope.tableData.map(a => a.appName)));;

  $scope.expanding = {};
  for (index = 0; index < $scope.appNames.length; index++) {
    $scope.expanding[$scope.appNames[index]] = false;
  }

  $scope.swapExpanding = function(name) {
    $scope.expanding[name] = !$scope.expanding[name];
  }

}
例如,我需要从上面的json中筛选出一个包含应用程序名称和最新时间戳的数组

filteredArray = [{
                  "appName": "App 1",
                  "timeStamp": "2018-05-28T00:01:01.001Z",
                  "GitTag": "RELEASE-1.0.1.24",
                  "blocker": 3,
                  "critical": 4,
                  "major": 30,
                  "minor": 3,
                  "UnitTestsTotal": 59,
                  "FailedTests": 0,
                  "CodeCoverage": 90
                  },
                  {
                  "appName": "App 2",
                  "timeStamp": "2018-05-28T00:01:01.001Z",
                  "GitTag": "RELEASE-1.0.1.3",
                  "blocker": 3,
                  "critical": 4,
                  "major": 30,
                  "minor": 3,
                  "UnitTestsTotal": 59,
                  "FailedTests": 0,
                  "CodeCoverage": 90
                },
                {
                  "appName": "App 3",
                  "timeStamp": "2018-05-27T00:01:01.001Z",
                  "GitTag": "RELEASE-1.0.0.9",
                  "blocker": 3,
                  "critical": 4,
                  "major": 30,
                  "minor": 3,
                  "UnitTestsTotal": 59,
                  "FailedTests": 0,
                  "CodeCoverage": 90
                },
                {
                  "appName": "App 4",
                  "timeStamp": "2018-05-28T00:01:01.001Z",
                  "GitTag": "RELEASE-1.1.1.8",
                  "blocker": 3,
                  "critical": 4,
                  "major": 30,
                  "minor": 3,
                  "UnitTestsTotal": 59,
                  "FailedTests": 0,
                  "CodeCoverage": 90
                }
]
我现在的angularjs代码如下所示:

{
    "data": [
        {
          "appDetails": [
            {
              "appDescription": [
                {
                  "appName": "App 1",
                  "timeStamp": "2018-05-28T00:01:01.001Z",
                  "GitTag": "RELEASE-1.0.1.24",
                  "blocker": 3,
                  "critical": 4,
                  "major": 30,
                  "minor": 3,
                  "UnitTestsTotal": 59,
                  "FailedTests": 0,
                  "CodeCoverage": 90
                },
                {
                  "appName": "App 1",
                  "timeStamp": "2018-05-27T00:01:01.001Z",
                  "GitTag": "RELEASE-1.0.1.23",
                  "blocker": 3,
                  "critical": 4,
                  "major": 30,
                  "minor": 3,
                  "UnitTestsTotal": 59,
                  "FailedTests": 0,
                  "CodeCoverage": 90
                },
                {
                  "appName": "App 2",
                  "timeStamp": "2018-05-26T00:01:01.001Z",
                  "GitTag": "RELEASE-1.0.1.22",
                  "blocker": 3,
                  "critical": 4,
                  "major": 30,
                  "minor": 3,
                  "UnitTestsTotal": 59,
                  "FailedTests": 0,
                  "CodeCoverage": 90
                },
                {
                  "appName": "App 2",
                  "timeStamp": "2018-05-28T00:01:01.001Z",
                  "GitTag": "RELEASE-1.0.1.3",
                  "blocker": 3,
                  "critical": 4,
                  "major": 30,
                  "minor": 3,
                  "UnitTestsTotal": 59,
                  "FailedTests": 0,
                  "CodeCoverage": 90
                },
                {
                  "appName": "App 2",
                  "timeStamp": "2018-05-26T00:01:01.001Z",
                  "GitTag": "RELEASE-1.0.1.2",
                  "blocker": 3,
                  "critical": 4,
                  "major": 30,
                  "minor": 3,
                  "UnitTestsTotal": 59,
                  "FailedTests": 0,
                  "CodeCoverage": 90
                },
                {
                  "appName": "App 3",
                  "timeStamp": "2018-05-27T00:01:01.001Z",
                  "GitTag": "RELEASE-1.0.0.9",
                  "blocker": 3,
                  "critical": 4,
                  "major": 30,
                  "minor": 3,
                  "UnitTestsTotal": 59,
                  "FailedTests": 0,
                  "CodeCoverage": 90
                },
                {
                  "appName": "App 3",
                  "timeStamp": "2018-05-25T00:01:01.001Z",
                  "GitTag": "RELEASE-1.0.0.8",
                  "blocker": 3,
                  "critical": 4,
                  "major": 30,
                  "minor": 3,
                  "UnitTestsTotal": 59,
                  "FailedTests": 0,
                  "CodeCoverage": 90
                },
                {
                  "appName": "App 4",
                  "timeStamp": "2018-05-28T00:01:01.001Z",
                  "GitTag": "RELEASE-1.1.1.8",
                  "blocker": 3,
                  "critical": 4,
                  "major": 30,
                  "minor": 3,
                  "UnitTestsTotal": 59,
                  "FailedTests": 0,
                  "CodeCoverage": 90
                },
                {
                  "appName": "App 4",
                  "timeStamp": "2018-05-25T00:01:01.001Z",
                  "GitTag": "RELEASE-1.1.1.6",
                  "blocker": 3,
                  "critical": 4,
                  "major": 30,
                  "minor": 3,
                  "UnitTestsTotal": 59,
                  "FailedTests": 0,
                  "CodeCoverage": 90
                }
              ]
            }
          ]
        }
      ]
    }
var myApp = angular.module('myApp', []);

function MyCtrl($scope) {

  $scope.tableData = [{
              "appName": "App 1",
              "timeStamp": "2018-05-28T00:01:01.001Z",
              "GitTag": "RELEASE-1.0.1.24",
              "blocker": 3,
              "critical": 4,
              "major": 30,
              "minor": 3,
              "UnitTestsTotal": 59,
              "FailedTests": 0,
              "CodeCoverage": 90
            },
            {
              "appName": "App 1",
              "timeStamp": "2018-05-27T00:01:01.001Z",
              "GitTag": "RELEASE-1.0.1.23",
              "blocker": 3,
              "critical": 4,
              "major": 30,
              "minor": 3,
              "UnitTestsTotal": 59,
              "FailedTests": 0,
              "CodeCoverage": 90
            },
            {
              "appName": "App 2",
              "timeStamp": "2018-05-26T00:01:01.001Z",
              "GitTag": "RELEASE-1.0.1.22",
              "blocker": 3,
              "critical": 4,
              "major": 30,
              "minor": 3,
              "UnitTestsTotal": 59,
              "FailedTests": 0,
              "CodeCoverage": 90
            },
            {
              "appName": "App 2",
              "timeStamp": "2018-05-28T00:01:01.001Z",
              "GitTag": "RELEASE-1.0.1.3",
              "blocker": 3,
              "critical": 4,
              "major": 30,
              "minor": 3,
              "UnitTestsTotal": 59,
              "FailedTests": 0,
              "CodeCoverage": 90
            },
            {
              "appName": "App 2",
              "timeStamp": "2018-05-26T00:01:01.001Z",
              "GitTag": "RELEASE-1.0.1.2",
              "blocker": 3,
              "critical": 4,
              "major": 30,
              "minor": 3,
              "UnitTestsTotal": 59,
              "FailedTests": 0,
              "CodeCoverage": 90
            },
            {
              "appName": "App 3",
              "timeStamp": "2018-05-27T00:01:01.001Z",
              "GitTag": "RELEASE-1.0.0.9",
              "blocker": 3,
              "critical": 4,
              "major": 30,
              "minor": 3,
              "UnitTestsTotal": 59,
              "FailedTests": 0,
              "CodeCoverage": 90
            },
            {
              "appName": "App 3",
              "timeStamp": "2018-05-25T00:01:01.001Z",
              "GitTag": "RELEASE-1.0.0.8",
              "blocker": 3,
              "critical": 4,
              "major": 30,
              "minor": 3,
              "UnitTestsTotal": 59,
              "FailedTests": 0,
              "CodeCoverage": 90
            },
            {
              "appName": "App 4",
              "timeStamp": "2018-05-28T00:01:01.001Z",
              "GitTag": "RELEASE-1.1.1.8",
              "blocker": 3,
              "critical": 4,
              "major": 30,
              "minor": 3,
              "UnitTestsTotal": 59,
              "FailedTests": 0,
              "CodeCoverage": 90
            },
            {
              "appName": "App 4",
              "timeStamp": "2018-05-25T00:01:01.001Z",
              "GitTag": "RELEASE-1.1.1.6",
              "blocker": 3,
              "critical": 4,
              "major": 30,
              "minor": 3,
              "UnitTestsTotal": 59,
              "FailedTests": 0,
              "CodeCoverage": 90
            }

  ]

  $scope.appNames = Array.from(new Set($scope.tableData.map(a => a.appName)));;

  $scope.expanding = {};
  for (index = 0; index < $scope.appNames.length; index++) {
    $scope.expanding[$scope.appNames[index]] = false;
  }

  $scope.swapExpanding = function(name) {
    $scope.expanding[name] = !$scope.expanding[name];
  }

}
var myApp=angular.module('myApp',[]);
函数MyCtrl($scope){
$scope.tableData=[{
“应用程序名称”:“应用程序1”,
“时间戳”:“2018-05-28:00:01:01.001Z”,
“GitTag”:“RELEASE-1.0.1.24”,
“拦截器”:3,
“关键”:4,
“主要”:30,
“小调”:3,
“UnitTestsTotal”:59,
“失败测试”:0,
“超额”:90
},
{
“应用程序名称”:“应用程序1”,
“时间戳”:“2018-05-27T00:01:01.001Z”,
“GitTag”:“RELEASE-1.0.1.23”,
“拦截器”:3,
“关键”:4,
“主要”:30,
“小调”:3,
“UnitTestsTotal”:59,
“失败测试”:0,
“超额”:90
},
{
“应用程序名称”:“应用程序2”,
“时间戳”:“2018-05-26T00:01:01.001Z”,
“GitTag”:“RELEASE-1.0.1.22”,
“拦截器”:3,
“关键”:4,
“主要”:30,
“小调”:3,
“UnitTestsTotal”:59,
“失败测试”:0,
“超额”:90
},
{
“应用程序名称”:“应用程序2”,
“时间戳”:“2018-05-28:00:01:01.001Z”,
“GitTag”:“RELEASE-1.0.1.3”,
“拦截器”:3,
“关键”:4,
“主要”:30,
“小调”:3,
“UnitTestsTotal”:59,
“失败测试”:0,
“超额”:90
},
{
“应用程序名称”:“应用程序2”,
“时间戳”:“2018-05-26T00:01:01.001Z”,
“GitTag”:“RELEASE-1.0.1.2”,
“拦截器”:3,
“关键”:4,
“主要”:30,
“小调”:3,
“UnitTestsTotal”:59,
“失败测试”:0,
“超额”:90
},
{
“应用程序名称”:“应用程序3”,
“时间戳”:“2018-05-27T00:01:01.001Z”,
“GitTag”:“RELEASE-1.0.0.9”,
“拦截器”:3,
“关键”:4,
“主要”:30,
“小调”:3,
“UnitTestsTotal”:59,
“失败测试”:0,
“超额”:90
},
{
“应用程序名称”:“应用程序3”,
“时间戳”:“2018-05-25T00:01:01.001Z”,
“GitTag”:“RELEASE-1.0.0.8”,
“拦截器”:3,
“关键”:4,
“主要”:30,
“小调”:3,
“UnitTestsTotal”:59,
“失败测试”:0,
“超额”:90
},
{
“应用程序名称”:“应用程序4”,
“时间戳”:“2018-05-28:00:01:01.001Z”,
“GitTag”:“RELEASE-1.1.8”,
“拦截器”:3,
“关键”:4,
“主要”:30,
“小调”:3,
“UnitTestsTotal”:59,
“失败测试”:0,
“超额”:90
},
{
“应用程序名称”:“应用程序4”,
“时间戳”:“2018-05-25T00:01:01.001Z”,
“GitTag”:“RELEASE-1.1.6”,
“拦截器”:3,
“关键”:4,
“主要”:30,
“小调”:3,
“UnitTestsTotal”:59,
“失败测试”:0,
“超额”:90
}
]
$scope.appNames=Array.from(新集合($scope.tableData.map(a=>a.appName));;
$scope.expansing={};
对于(索引=0;索引<$scope.appNames.length;索引++){
$scope.expansing[$scope.appNames[index]]=false;
}
$scope.swapExpanding=函数(名称){
$scope.expansing[name]=!$scope.expansing[name];
}
}

请帮助我,因为我对javascript和js都是新手。如果能根据appName键和最新时间戳在angularjs代码中过滤数组,我将不胜感激。提前谢谢

使用
reduce
按名称分组,内部有一个测试来比较时间戳:

const-appDescription=[{“appName”:“App 1”,“timeStamp”:“2018-05-28:01:01.001Z”,“GitTag”:“RELEASE-1.0.1.24”,“blocker”:3,“critical”:4,“major”:30,“minor”:3,“UnitTestsTotal”:59,“FailedTests”:0,“CodeCoverage”:90},“App 1”,“timeStamp”:“2018-05-27T00:01:01.001Z”,“GitTag”:“RELEASE-1.0.1.1.23”,“blocker”:3,“critical”:4,“major”:30,“minor”:3,“UnitTestsTotal”:59,“FailedTests”:0,“CodeOverage”:90},{“appName”:“App2”,“timeStamp”:“2018-05-26T00:01:01.001Z”,“GitTag”:“RELEASE-1.0.1.22”,“blocker”:3,“critical”:4,“major”:30,“minor”:3,“UnitTestsTotal”:59,“FailedTests”:0,“CodeOverage”:90},{“appName”:“App2”,“timeStamp”:“2018-05-28:00:01:01.001Z”,“GitTag”:“RELEASE-1.0.1.3”,“blocker”:“critical”“:4,“主要”:30,“次要”:3,“UnitTestsTotal”:59,“FailedTests”:0,“CodeOverage”:90},{“appName”:“App2”,“时间戳”:“2018-05-26T00:01:01.001Z”,“GitTag”:“RELEASE-1.0.1.2”,“blocker”:3,“critical”:4,“主要”:30,“minor”:3,“UnitTestsTotal”:59,“FailedTests”:0,“CodeOverage”:90},{“appName”:“App3”,“时间戳”:“2018-05-27T00:01:01.001Z”,“Tag”:“RELEASE-0.9”“阻止者”:3,“关键的”:4,“主要的”:30,“次要的”:3,“UnitTestsTotal”:59,“失败的测试”:0,“CodeOverage”:90},{“appName”:“App3”,“时间戳”:“2018-05-25T00:01:01.001Z”,“GitTag”:“RELEASE-1.0.0.8”,“阻止者”:3,“关键的”:4,“主要的”:30,“次要的”:3,“UnitTestsTotal”:59,“失败的测试”:0,“CodeOverage”:90},{“appName”:“App4”,“时间戳”:“2018-05-2800:01.001Z”,“GitTag”:“RELEASE-1.1.1。