javascript forEach on array / json data但是排序最新日期?

时间:2016-03-07 01:04:12

标签: javascript json

是否可以修改以下内容,以便在foreach上反转,以便最新的数据日期首先而不是最旧的最新日期?

var json = {
  "TrackingRecord": {
    "Authorised": "Authorised(5.77.48.131)",
    "DeliveryAddress": {
      "CompanyName": "JAMES DERICK",
      "Address1": "6",
      "Address2": "LIBER HOUSE",
      "Address3": "OLYMPIAN",
      "Town": "YORK",
      "Postcode": "YO10 3UF",
      "ContactName": "JAMES DERICK",
      "ContactTelephone": "7507346318"
    },
    "CollectionAddress": {
      "CompanyName": "AMBIENT LOUNGE LTD",
      "Address1": "UNIT 3 LONG HEDGE LANE INDUSTR",
      "Address2": "BOTTESFORD",
      "Address3": {

      },
      "Town": "NOTTINGHAM",
      "Postcode": "NG13 0BF",
      "ContactName": "SARAH KIRBY",
      "ContactTelephone": "07879 442266074"
    },
    "ConsignmentInformation": {
      "Pieces": "1",
      "Pallets": "0",
      "Weight": "10",
      "Service": "Priority 1",
      "DeliveryDate": "2016-02-29T00:00:00",
      "ItemsDelivered": "1",
      "ConsignmentRef": "2838",
      "SpecialInstructions": "JAMES DERICK 7507346318 {JAMES\u003Cbr\u003E14075@GMAIL.COM}\u003Cbr\u003E",
      "AdditionalReferencesInformation": {
        "AdditionalReferences": {
          "Reference": "2838"
        }
      }
    },
    "MovementInformation": {
      "Movement": [{
        "MovementDate": "2016-02-25T00:00:00",
        "MovementTime": "0001-01-01T10:00:04",
        "Description": "Created By EZEEWEB",
        "DeliveryDepot": "Leeds",
        "Round": "019",
        "DeliveryDate": "2016-02-26T00:00:00",
        "PackagesReceived": "0",
        "PackagesDelivered": "0"
      }, {
        "MovementDate": "2016-02-26T00:00:00",
        "MovementTime": "0001-01-01T07:11:53",
        "Description": "Out to deliver",
        "DeliveryDepot": "Leeds",
        "Round": "019",
        "DeliveryDate": "2016-02-26T00:00:00",
        "PackagesReceived": "1",
        "PackagesDelivered": "0"
      }, {
        "MovementDate": "2016-02-26T00:00:00",
        "MovementTime": "0001-01-01T11:00:53",
        "Description": "Failed - Other reason",
        "DeliveryDepot": "Leeds",
        "Round": "019",
        "DeliveryDate": "2016-02-29T00:00:00",
        "PackagesReceived": "1",
        "PackagesDelivered": "0"
      }, {
        "MovementDate": "2016-02-27T00:00:00",
        "MovementTime": "0001-01-01T05:59:32",
        "Description": "Out to deliver",
        "DeliveryDepot": "Leeds",
        "Round": "019",
        "DeliveryDate": "2016-02-29T00:00:00",
        "PackagesReceived": "1",
        "PackagesDelivered": "0"
      }, {
        "MovementDate": "2016-02-29T00:00:00",
        "MovementTime": "0001-01-01T10:55:43",
        "Description": "Delivered",
        "DeliveryDepot": "Leeds",
        "Round": "019",
        "DeliveryDate": "2016-02-29T00:00:00",
        "PackagesReceived": "1",
        "PackagesDelivered": "1"
      }]
    },
    "TimedInformation": {
      "TimedDelivery": {
        "Signature": "DERICK",
        "SignatureDate": "2016-02-29T00:00:00",
        "SignatureTime": "0001-01-01T10:55:00"
      }
    },
    "ScanInformation": {
      "Scan": [{
        "PieceID": "148426702251072001",
        "Description": "Auto Inbound Scan   ()",
        "Depot": "Newark",
        "ScanDate": "2016-02-25T00:00:00",
        "ScanTime": "0001-01-01T17:12:01",
        "ScannedBy": "NWK CONVYR"
      }, {
        "PieceID": "148426702251072001",
        "Description": "Auto Inbound Scan   ()",
        "Depot": "Leeds",
        "ScanDate": "2016-02-26T00:00:00",
        "ScanTime": "0001-01-01T02:22:08",
        "ScannedBy": "LDS CONVYR"
      }, {
        "PieceID": "148426702251072001",
        "Description": "Load C & D          (019)",
        "Depot": "Leeds",
        "ScanDate": "2016-02-26T00:00:00",
        "ScanTime": "0001-01-01T03:37:45",
        "ScannedBy": "CJONES"
      }, {
        "PieceID": "148426702251072001",
        "Description": "Load C & D          (019)",
        "Depot": "Leeds",
        "ScanDate": "2016-02-26T00:00:00",
        "ScanTime": "0001-01-01T23:43:22",
        "ScannedBy": "CJONES"
      }]
    },
    "ImageInformation": {
      "PODImage": {
        "URL": "http:\/\/www.tpeweb.co.uk\/ezpod\/tpenas\/valid\/20160229\/014842672838___________00000_01.tif"
      }
    }
  }
}



json.TrackingRecord.MovementInformation.Movement.forEach(function(item) {
  //console.log(item);
  item.MovementDate = moment(item.MovementDate).format('ddd, Do of MMM YYYY');
  item.MovementTime = moment(item.MovementTime).format('hh:mm a');
  $("#movement tbody").append("<tr><td>" + item.MovementDate + "</td><td>" + item.MovementTime + "</td><td>" + item.Description + "</td></tr>");
})
<script src="https://cdn.jsdelivr.net/momentjs/2.11.2/moment.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table id="movement">
  <thead>
    <tr>
      <th>Date</th>
      <th>Time</th>
      <th>Status</th>
    </tr>
  </thead>
  <tbody>
  </tbody>
</table>

3 个答案:

答案 0 :(得分:2)

不是普通forEach。可能性:

  • 假设它按升序排列。循环索引从length - 10。无损。
  • 假设它按升序排列。应用reverse,然后forEach。破坏性的。
  • 假设它未分类。对数组进行排序,然后应用forEach。破坏性的。
  • 假设它未分类。创建一个索引数组,按照数组中相应的值对索引进行排序,对索引应用forEach并访问数组成员。无损。
  • 假设它未分类。使用slice克隆数组,然后应用sortforEach。无损。

答案 1 :(得分:1)

你可以改变

json.TrackingRecord.MovementInformation.Movement.forEach(function(item) {

json.TrackingRecord.MovementInformation.Movement.reverse().forEach(function(item) {
                                                 ^^^^^^^^^

var json = {
  "TrackingRecord": {
    "Authorised": "Authorised(5.77.48.131)",
    "DeliveryAddress": {
      "CompanyName": "JAMES DERICK",
      "Address1": "6",
      "Address2": "LIBER HOUSE",
      "Address3": "OLYMPIAN",
      "Town": "YORK",
      "Postcode": "YO10 3UF",
      "ContactName": "JAMES DERICK",
      "ContactTelephone": "7507346318"
    },
    "CollectionAddress": {
      "CompanyName": "AMBIENT LOUNGE LTD",
      "Address1": "UNIT 3 LONG HEDGE LANE INDUSTR",
      "Address2": "BOTTESFORD",
      "Address3": {

      },
      "Town": "NOTTINGHAM",
      "Postcode": "NG13 0BF",
      "ContactName": "SARAH KIRBY",
      "ContactTelephone": "07879 442266074"
    },
    "ConsignmentInformation": {
      "Pieces": "1",
      "Pallets": "0",
      "Weight": "10",
      "Service": "Priority 1",
      "DeliveryDate": "2016-02-29T00:00:00",
      "ItemsDelivered": "1",
      "ConsignmentRef": "2838",
      "SpecialInstructions": "JAMES DERICK 7507346318 {JAMES\u003Cbr\u003E14075@GMAIL.COM}\u003Cbr\u003E",
      "AdditionalReferencesInformation": {
        "AdditionalReferences": {
          "Reference": "2838"
        }
      }
    },
    "MovementInformation": {
      "Movement": [{
        "MovementDate": "2016-02-25T00:00:00",
        "MovementTime": "0001-01-01T10:00:04",
        "Description": "Created By EZEEWEB",
        "DeliveryDepot": "Leeds",
        "Round": "019",
        "DeliveryDate": "2016-02-26T00:00:00",
        "PackagesReceived": "0",
        "PackagesDelivered": "0"
      }, {
        "MovementDate": "2016-02-26T00:00:00",
        "MovementTime": "0001-01-01T07:11:53",
        "Description": "Out to deliver",
        "DeliveryDepot": "Leeds",
        "Round": "019",
        "DeliveryDate": "2016-02-26T00:00:00",
        "PackagesReceived": "1",
        "PackagesDelivered": "0"
      }, {
        "MovementDate": "2016-02-26T00:00:00",
        "MovementTime": "0001-01-01T11:00:53",
        "Description": "Failed - Other reason",
        "DeliveryDepot": "Leeds",
        "Round": "019",
        "DeliveryDate": "2016-02-29T00:00:00",
        "PackagesReceived": "1",
        "PackagesDelivered": "0"
      }, {
        "MovementDate": "2016-02-27T00:00:00",
        "MovementTime": "0001-01-01T05:59:32",
        "Description": "Out to deliver",
        "DeliveryDepot": "Leeds",
        "Round": "019",
        "DeliveryDate": "2016-02-29T00:00:00",
        "PackagesReceived": "1",
        "PackagesDelivered": "0"
      }, {
        "MovementDate": "2016-02-29T00:00:00",
        "MovementTime": "0001-01-01T10:55:43",
        "Description": "Delivered",
        "DeliveryDepot": "Leeds",
        "Round": "019",
        "DeliveryDate": "2016-02-29T00:00:00",
        "PackagesReceived": "1",
        "PackagesDelivered": "1"
      }]
    },
    "TimedInformation": {
      "TimedDelivery": {
        "Signature": "DERICK",
        "SignatureDate": "2016-02-29T00:00:00",
        "SignatureTime": "0001-01-01T10:55:00"
      }
    },
    "ScanInformation": {
      "Scan": [{
        "PieceID": "148426702251072001",
        "Description": "Auto Inbound Scan   ()",
        "Depot": "Newark",
        "ScanDate": "2016-02-25T00:00:00",
        "ScanTime": "0001-01-01T17:12:01",
        "ScannedBy": "NWK CONVYR"
      }, {
        "PieceID": "148426702251072001",
        "Description": "Auto Inbound Scan   ()",
        "Depot": "Leeds",
        "ScanDate": "2016-02-26T00:00:00",
        "ScanTime": "0001-01-01T02:22:08",
        "ScannedBy": "LDS CONVYR"
      }, {
        "PieceID": "148426702251072001",
        "Description": "Load C & D          (019)",
        "Depot": "Leeds",
        "ScanDate": "2016-02-26T00:00:00",
        "ScanTime": "0001-01-01T03:37:45",
        "ScannedBy": "CJONES"
      }, {
        "PieceID": "148426702251072001",
        "Description": "Load C & D          (019)",
        "Depot": "Leeds",
        "ScanDate": "2016-02-26T00:00:00",
        "ScanTime": "0001-01-01T23:43:22",
        "ScannedBy": "CJONES"
      }]
    },
    "ImageInformation": {
      "PODImage": {
        "URL": "http:\/\/www.tpeweb.co.uk\/ezpod\/tpenas\/valid\/20160229\/014842672838___________00000_01.tif"
      }
    }
  }
}



json.TrackingRecord.MovementInformation.Movement.reverse().forEach(function(item) {
  //console.log(item);
  item.MovementDate = moment(item.MovementDate).format('ddd, Do of MMM YYYY');
  item.MovementTime = moment(item.MovementTime).format('hh:mm a');
  $("#movement tbody").append("<tr><td>" + item.MovementDate + "</td><td>" + item.MovementTime + "</td><td>" + item.Description + "</td></tr>");
})
<script src="https://cdn.jsdelivr.net/momentjs/2.11.2/moment.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table id="movement">
  <thead>
    <tr>
      <th>Date</th>
      <th>Time</th>
      <th>Status</th>
    </tr>
  </thead>
  <tbody>
  </tbody>
</table>

请记住,reverse实际上修改了数组,它不仅返回一个反转元素的数组。但是,这可能是你想要的,因为它应该按照这个顺序打印。

答案 2 :(得分:1)

在数组上向后迭代的非破坏性方法(除了for for循环)是 reduceRight

json.TrackingRecord.MovementInformation.Movement.reduceRight(function(acc, item) {
  // do stuff
}, null);