2015-06-03 31 views
2

我的JSON對象陣測繪角

$scope.selectedItems ={ 
    "RECORDS": [ 
     { 
      "Id": 23040035705987, 
      "arriveddate": "2015/04/24", 
      "expirationDate": null, 
      "replacedDate": null, 
      "processDate": "2015/04/24" 
     }, 
     { 
      "Id": 23070041800654, 
      "arriveddate": "2015/04/24", 
      "expirationDate": null, 
      "replacedDate": null, 
      "processDate": "2015/04/27" 
     }, 
     { 
      "Id": 23040035705984, 
      "arriveddate": "2015/04/24", 
      "expirationDate": null, 
      "replacedDate": null, 
      "processDate": "2015/04/24" 
     }, 
     { 
      "Id": 23040035705983, 
      "arriveddate": "2015/04/24", 
      "expirationDate": null, 
      "replacedDate": null, 
      "processDate": "2015/04/24" 
     } 
    ] 
} 

我試圖

對於每一個獨特的工藝日期我有我需要的相應的ID在一個單獨的對象在下文提到的對象的過程日期24/04/2015年與IDS與83,84,87結束,過程日期27/04/2015比賽與54

我預期的JSON對象結束的ID相匹配

{ 
    "processDate": [ 
     "2015/04/24", 
     "2015/04/27" 
    ], 
    "Id": [ 
     [ 
      23040035705983, 
      23040035705984, 
      23040035705987 
     ], 
     [ 
      23070041800654 
     ] 
    ] 
} 

我是多麼想

angular.forEach($scope.selectedItems.RECORDS, function (item) { 
       $scope.ProcessDate = item.processDate; 
       if($scope.processDatesSelected.indexOf($scope.ProcessDate) == -1){ 
        $scope.processDatesSelected.push($scope.ProcessDate); 
       } 

       if($scope.processDatesSelected.indexOf($scope.ProcessDate) != -1 && $scope.id.indexOf(item.Id) == -1){ 
        $scope.id.push(item.Id); 
       } 

      }); 

    $scope.changesSelected.push({processDate:$scope.processDatesSelected,Ids:$scope.id}); 
    console.log(JSON.stringify($scope.changesSelected)); 

問題是ID爲沒有相應的映射,我已經創建了一個相同的(http://plnkr.co/edit/mkLXdOKayaqyDDDheFeu?p=preview) 任何幫助一個plunker將不勝感激。

回答

0

你想使陣列每個日期,所以你應該帶參數時id陣列創建

檢查該帳戶日期: http://plnkr.co/edit/vrig4P9SgZh8Kk7BkyEt?p=preview

首先,你必須從第一陣列發現項目索引,然後將您的元素添加到正確的位置。

var processDateIndex = $scope.processDatesSelected.indexOf($scope.ProcessDate); 
if(processDateIndex != -1 && $scope.id.indexOf(item.Id) == -1){ 
    if ($scope.id.length < processDateIndex+1) 
    { 
    $scope.id.push([]); 
    } 
    $scope.id[processDateIndex].push(item.Id); 
} 

您也可以使用這樣的結構。它可以幫助你輕鬆maintanance這個集合:

{ 
    "processDate": [ 
     { 
      Date: "2015/04/24", 
      Ids: [ 
       23040035705983, 
       23040035705984, 
       23040035705987 
      ] 
     }, 
     { 
      Date: "2015/04/27", 
      Ids: [ 
       23070041800654 
      ] 
     } 
    ] 
} 
0

這應該做的伎倆:

var result = { 
    processDate: [], 
    Id: [] 
}; 

for(var i = 0; i < $scope.selectedItems.RECORDS.length; i++) { 
    var record = $scope.selectedItems.RECORDS[i], 
     index = result.processDate.indexOf(record.processDate); 
    if(index === -1) { 
     result.processDate.push(record.processDate); 
     result.Id.push([record.Id]); 
    } else { 
     result.Id[index].push(record.Id); 
    } 
} 
1

試試這個方法:http://plnkr.co/edit/LS40YJR9X0OAqBTIP2lZ?p=preview

angular.forEach($scope.selectedItems.RECORDS, function (item) { 
      $scope.ProcessDate = item.processDate; 
      var i=$scope.processDatesSelected.indexOf($scope.ProcessDate); 
      if(i == -1){ 
       i=$scope.processDatesSelected.length; 
       $scope.processDatesSelected.push($scope.ProcessDate); 
       $scope.id[i]=[]; 
      } 

      if(i != -1 && $scope.id[i].indexOf(item.Id) == -1){ 
       $scope.id[i].push(item.Id); 
      } 

     });