我需要使用Angular.js或Javascript重新排列以下数据数组。
Factory method
我需要重新排列以上格式的上述数据数组。
public static class CustomObjectFactory
{
public static ICustomObject GetCustomObject(string ObjectName)
{
switch (ObjectName)
{
case "Object 1":
return new Object1();
case "Object 2":
return new Object2();
}
return null;
}
}
请帮我解决这个问题。
答案 0 :(得分:2)
forEach()
方法每个数组元素执行一次提供的函数。
和数据和日期的两个临时对象。
var listOfData = [
{ 'date': '2016-01-25 18:14:00', 'name': 'raj', 'email': 'raj@gmail.com', 'order_status': 1, 'order_id': 1111 },
{ 'date': '2016-02-04 11:26:05', 'name': 'raj', 'email': 'raj@gmail.com', 'order_status': 0, 'order_id': 2222 },
{ 'date': '2016-01-23 13:15:59', 'name': 'rahul', 'email': 'rahul@gmail.com', 'order_status': 1, 'order_id': 3333 },
{ 'date': '2016-01-25 18:14:00', 'name': 'rahul', 'email': 'rahul@gmail.com', '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>');
&#13;
答案 1 :(得分:0)
您可以尝试这样的事情:
name
或email id
var arr = [{
'date': '2016-01-25 18:14:00',
'name': 'raj',
'email': 'raj@gmail.com',
'order_status': 1,
'order_id': 1111
}, {
'date': '2016-02-04 11:26:05',
'name': 'raj',
'email': 'raj@gmail.com',
'order_status': 0,
'order_id': 2222
}, {
'date': '2016-01-23 13:15:59',
'name': 'rahul',
'email': 'rahul@gmail.com',
'order_status': 1,
'order_id': 3333
}, {
'date': '2016-01-25 18:14:00',
'name': 'rahul',
'email': 'rahul@gmail.com',
'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>');
答案 2 :(得分:0)
您可以使用underscorejs来操作数组。
var listOfData=[
{'date':'2016-01-25 18:14:00','name':'raj','email':'raj@gmail.com','order_status':1,'order_id':1111},
{'date':'2016-02-04 11:26:05','name':'raj','email':'raj@gmail.com','order_status':0,'order_id':2222},
{'date':'2016-01-23 13:15:59','name':'rahul','email':'rahul@gmail.com','order_status':1,'order_id':3333},
{'date':'2016-01-25 18:14:00','name':'rahul','email':'rahul@gmail.com','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)
&#13;
<script src="http://underscorejs.org/underscore-min.js"></script>
&#13;