2016-06-28 68 views
0

我有一个名为event的json对象数组,其中包含eventId,eventName和最重要的dateofevent等字段。如何筛选和构建此JSON?

[{event1},{event2},{event3}];

我需要遍历这个事件数组并过滤掉同一天发生的事件。获得像这样的新对象。

"days": [ 
    { 
     "date": "11-05-2015", 
     "events": [ 
      {"eventId": 1, ...}, 
      {"eventId": 2, ...}, 
      {"eventId": 3, ...}, 
      {"eventId": 4, ...}, 
     ] 
    }, 

如何使用Javascript或Angular有效地执行此操作?

+0

首先要说的是:Javascript是一种语言。 Angular是一个Javascript框架。你不需要Angular来实现你所要求的。其次,这应该有助于https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter –

+0

[Javascript:如何根据属性过滤对象数组?]( http://stackoverflow.com/questions/2722159/javascript-how-to-filter-object-array-based-on-attributes) –

回答

0

您可以使用日期作为键创建一个新对象,并且这些值是包含事件的数组。 有了日期=>事件映射后,将其转换为所需结构中的数组。

假设原始数据是在一个名为 “事件” 变量:

var events = [{event 1}, {event 2}...]; 
    var daysMap = {}; 
    var days = []; 
    events.map(function(event) { 
     if (days[event.dateofevent] === undefined) { 
      days[event.dateofevent] = []; 
     } 
     days[event.dateofevent].push(event); 
    }); 
    for (var day in daysMap) { 
     days.push({ 
      date: day, 
      events: daysMap[day] 
     }); 
    } 
+0

谢谢你的答案! –

-1

HTML

<div ng-app> 
    <span class="bold">Demonstrating filtering and sorting using Angular JS</span> 
    <br /><br /> 
     <div ng-controller="ShoppingCartCtrl">   
      <div>Sort by: 
      <select ng-model="sortExpression"> 
        <option value="Name">Name</option> 
        <option value="Price">Price</option> 
        <option value="Quantity">Quantity</option> 
       </select> 
      </div> 
      <br /> 
      <div><strong>Filter Results</strong></div> 
      <table> 
       <tr> 
        <td>By Any: </td> 
        <td><input type="text" ng-model="search.$" /></td> 
       </tr> 
       <tr> 
        <td>By Name: </td> 
        <td><input type="text" ng-model="search.Name" /></td> 
       </tr> 
       <tr> 
        <td>By Price: </td> 
        <td><input type="text" ng-model="search.Price" /></td> 
       </tr> 
       <tr> 
        <td>By Quantity: </td> 
        <td><input type="text" ng-model="search.Quantity" /></td> 
       </tr> 
      </table> 
      <br /> 
      <table border="1"> 
       <thead> 
        <tr> 
         <th>Name</th> 
         <th>Price</th> 
         <th>Quantity</th> 
        </tr> 
       </thead> 
       <tbody> 
        <tr ng-repeat="item in items | orderBy:mySortFunction | filter:search"> 
         <td>{{item.Name}}</td> 
         <td>{{item.Price | currency}}</td> 
         <td>{{item.Quantity}}</td> 
        </tr> 
       </tbody> 
      </table> 
      <br /> 
</div> 
</div> 

的Javascript

function ShoppingCartCtrl($scope) { 

     $scope.items = [ 
      {Name: "Soap", Price: "25", Quantity: "10"}, 
      {Name: "Shaving cream", Price: "50", Quantity: "15"}, 
      {Name: "Shampoo", Price: "100", Quantity: "5"} 
     ]; 

     $scope.mySortFunction = function(item) { 
      if(isNaN(item[$scope.sortExpression])) 
       return item[$scope.sortExpression]; 
      return parseInt(item[$scope.sortExpression]); 
     } 
} 

CSS

.bold { font-weight:bold; } 

table td{ 
    padding: 10px; 
} 

table th{ 
    font-weight: bold; 
    text-align: center; 
} 

demo_click here

+0

什么?我认为你回答了错误的问题...... –