javascript foreach on array / json data 但按最新日期排序

javascript forEach on array / json data but sortby latest date?

本文关键字:最新 日期 排序 data json foreach on array javascript      更新时间:2023-09-26
是否可以

修改以下内容,以便在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>

不是普通的forEach .可能性:

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

后迭代数组(除了普通的 for 循环)的一种非破坏性方法是 reduceRight

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

改变

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实际修改数组,它不只是返回一个元素颠倒的数组。但是,考虑到它应该按该顺序打印,这可能是您想要的。