2016-02-05 46 views
-4

我需要使用Angular.js或Javascript重新排列以下數據數組。如何使用Angular.js/Javascript重新排列數組的值

$scope.listOfData=[ 
      { 
     {'date':'2016-01-25 18:14:00','name':'raj','email':'[email protected]','order_status':1,'order_id':1111}, 
     {'date':'2016-02-04 11:26:05','name':'raj','email':'[email protected]','order_status':0,'order_id':2222} 
     }, 
    { 
     {'date':'2016-01-23 13:15:59','name':'rahul','email':'[email protected]','order_status':1,'order_id':3333}, 
     {'date':'2016-01-25 18:14:00','name':'rahul','email':'[email protected]','order_status':0,'order_id':4444} 
    } 
] 

我需要重新排列上面的數組,像下面的格式。

$scope.array=[ 
       {'date':'2016-01-25 18:14:00 to 2016-01-25 18:14:00','name':'rahul','email':'[email protected]','order':[{'order_status':1,'order_id':'1111'},{'order_status':'0','order_id':'2222'} ]}, 
       {'date':'2016-01-23 13:15:59 to 2016-02-04 11:26:05','name':'raj','email':'[email protected]','order':[{'order_status':1,'order_id':'3333'},{'order_status':'0','order_id':'4444'} ]} 
] 

請幫我解決這個問題。

+0

請數據有效。 –

+0

那麼,你的問題是什麼? 「我需要」不算。 – georg

+0

您按日期範圍分組的權利?分組的規則是什麼?只是給一個數據集,然後是另一個數據集不夠好。我們需要知道規則從一個到另一個。 – ste2425

回答

3

甲一個環提案與Array.prototype.forEach()

forEach()方法每個數組元素一次執行設置功能。

和兩個臨時對象的數據和日期。

var listOfData = [ 
 
     { 'date': '2016-01-25 18:14:00', 'name': 'raj', 'email': '[email protected]', 'order_status': 1, 'order_id': 1111 }, 
 
     { 'date': '2016-02-04 11:26:05', 'name': 'raj', 'email': '[email protected]', 'order_status': 0, 'order_id': 2222 }, 
 
     { 'date': '2016-01-23 13:15:59', 'name': 'rahul', 'email': '[email protected]', 'order_status': 1, 'order_id': 3333 }, 
 
     { 'date': '2016-01-25 18:14:00', 'name': 'rahul', 'email': '[email protected]', 'order_status': 0, 'order_id': 4444 } 
 
    ], 
 
    compact = function (data) { 
 
     var object = {}, 
 
      date = {}, 
 
      array = []; 
 
     data.forEach(function (a) { 
 
      var k = a.name + '|' + a.email; 
 
      date[k] = date[k] || { from: a.date, to: a.date }; 
 
      if (a.date < date[k].from) { 
 
       date[k].from = a.date; 
 
      } 
 
      if (a.date > date[k].to) { 
 
       date[k].to = a.date; 
 
      } 
 
      if (!object[k]) { 
 
       object[k] = { date: a.date, name: a.name, email: a.email, order: [] }; 
 
       array.push(object[k]); 
 
      } 
 
      object[k].date = date[k].from + ' to ' + date[k].to; 
 
      object[k].order.push({ order_status: a.order_status, order_id: a.order_id }); 
 
     }); 
 
     return array; 
 
    }(listOfData); 
 

 
document.write('<pre>' + JSON.stringify(compact, 0, 4) + '</pre>');

+0

@ Nina Scholz:很好,但是在這裏我也需要從日期和更高日期到日期關鍵日期的較低日期。 – subhra

1

你可以嘗試這樣的事情:

  • 排序陣列基於nameemail id
  • 根據日期對此數組進行排序。
  • 創建一個具有必要屬性的對象。

var arr = [{ 
 
    'date': '2016-01-25 18:14:00', 
 
    'name': 'raj', 
 
    'email': '[email protected]', 
 
    'order_status': 1, 
 
    'order_id': 1111 
 
}, { 
 
    'date': '2016-02-04 11:26:05', 
 
    'name': 'raj', 
 
    'email': '[email protected]', 
 
    'order_status': 0, 
 
    'order_id': 2222 
 
}, { 
 
    'date': '2016-01-23 13:15:59', 
 
    'name': 'rahul', 
 
    'email': '[email protected]', 
 
    'order_status': 1, 
 
    'order_id': 3333 
 
}, { 
 
    'date': '2016-01-25 18:14:00', 
 
    'name': 'rahul', 
 
    'email': '[email protected]', 
 
    'order_status': 0, 
 
    'order_id': 4444 
 
}] 
 

 
arr.sort(function(a, b) { 
 
    if (a.name > b.name) return 1; 
 
    if (a.name < b.name) return -1; 
 
    return 0 
 
}).sort(function(a, b) { 
 
    return +new Date(a.date) - +new Date(b.date); 
 
}); 
 

 
var result = {} 
 
arr.forEach(function(item) { 
 
    if (!result[item.name]) { 
 
    result[item.name] = {}; 
 
    result[item.name].orders = []; 
 
    } 
 

 
    if (!result[item.name].startDate) 
 
    result[item.name].startDate = item.date 
 
    else 
 
    result[item.name].endDate = item.date 
 

 
    result[item.name].name = item.name; 
 
    result[item.name].email = item.email; 
 
    result[item.name].orders.push({ 
 
    "order_status": item.order_status, 
 
    "order_id": item.order_id, 
 
    "order_date": item.date 
 
    }); 
 
}); 
 

 
console.log(result); 
 

 
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');

+0

這段代碼不能在這裏運行。你可以做一個小小的例子。 – subhra

+0

你能解釋一下嗎?我給了我輸出。注意我使用普通變量而不是'$ scope' – Rajesh

+0

我已經更新了我的答案。請檢查 – Rajesh

0

您可以使用underscorejs超過數組操作。

var listOfData=[ 
 
     {'date':'2016-01-25 18:14:00','name':'raj','email':'[email protected]','order_status':1,'order_id':1111}, 
 
     {'date':'2016-02-04 11:26:05','name':'raj','email':'[email protected]','order_status':0,'order_id':2222}, 
 
     {'date':'2016-01-23 13:15:59','name':'rahul','email':'[email protected]','order_status':1,'order_id':3333}, 
 
     {'date':'2016-01-25 18:14:00','name':'rahul','email':'[email protected]','order_status':0,'order_id':4444}, 
 
]; 
 
    
 
    var grouped = _.chain(listOfData).groupBy(function(each){ return each.name+each.email}).map(function(each){ return {date:_.chain(each).pluck('date').value().join(' to '),name:_.first(each).name,email:_.first(each).email,order:_.chain(each).map(function(e1) { return {order_status:e1.order_status,order_id:e1.order_id} }).value()}}).value(); 
 
    
 
    console.log(grouped)
<script src="http://underscorejs.org/underscore-min.js"></script>