如何使用Angular.js / Javascript重新排列数组值

时间:2016-02-05 11:59:04

标签: javascript arrays angularjs

我需要使用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;
    }
}

请帮我解决这个问题。

3 个答案:

答案 0 :(得分:2)

使用Array.prototype.forEach()

的一个循环提案
  

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;
&#13;
&#13;

答案 1 :(得分:0)

您可以尝试这样的事情:

  • 根据nameemail 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来操作数组。

&#13;
&#13;
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;
&#13;
&#13;