【问题标题】:Ascending or descending order of array of object in angular 10?角度10中对象数组的升序或降序?
【发布时间】:2021-03-20 13:20:34
【问题描述】:
this.tripDetails= [
              {
                "vehicleNumber": "TN 47 GR 3679",
                "adminVehicleDTO": [
                  {
                    "tripId": 107,
                    "id": 1176,
                    "vehicleNumber": "TN 47 GR 3679",
                    "nominalType": "income",
                    "typeOfService": "REGULAR",
                    "amount": 250.0,
                    "vehicleId": 1,
                    "adhocVehicleId": null,
                    "reason": "Trip Income",
                    "reasonId": 71,
                    "description": null,
                    "remarks": null,
                    "deleteFlag": false
                }]
            },
              {
                "vehicleNumber": "KL 34 CV 6296",
                "adminVehicleDTO": [
                   {
                    "tripId": 104,
                    "id": 1165,
                    "vehicleNumber": "KL 34 CV 6296",
                    "nominalType": "income",
                    "typeOfService": "REGULAR",
                    "amount": 0.0,
                    "vehicleId": null,
                    "adhocVehicleId": 32,
                    "reason": "Trip Income",
                    "reasonId": 71,
                    "description": null,
                    "remarks": null,
                    "deleteFlag": false
                }]
            }, 
              {
                "vehicleNumber": "AP 06 DE 4089",
                "adminVehicleDTO": [
                  {
                    "tripId": 106,
                    "id": 1175,
                    "vehicleNumber": "AP 06 DE 4089",
                    "nominalType": "income",
                    "typeOfService": "REGULAR",
                    "amount": 0.0,
                    "vehicleId": 4,
                    "adhocVehicleId": null,
                    "reason": "Trip Income",
                    "reasonId": 71,
                    "description": null,
                    "remarks": null,
                    "deleteFlag": false
                }]
            }]

这是来自 API 的响应,我想根据角度打字稿中的 vehicleNumber 将其按升序或降序排列。我尝试了很多东西,但没有任何帮助。如果可能的话,提出一些想法来试试这个。谢谢

【问题讨论】:

    标签: angular typescript


    【解决方案1】:
        private sortArrayOfObjectByPropertyName(items: any[], propertyName: string, isDescendingOrder: boolean = false) {
        items.sort((a: any, b: any) => {
            if (a[propertyName] < b[propertyName]) {
                return isDescendingOrder ? 1 : -1;
            }
            if (a[propertyName] > b[propertyName]) {
                return isDescendingOrder ? -1 : 1;
            }
            return 0;
        });
    }
    

    【讨论】:

      【解决方案2】:

      您可以使用 JavaScript 排序功能。

      1. 你的参数是vehicleNumber
      {
                      "vehicleNumber": "TN 47 GR 3679",
                      "adminVehicleDTO": [
                        {
                          "tripId": 107,
                          "id": 1176,
                          "vehicleNumber": "TN 47 GR 3679",
                          "nominalType": "income",
                          "typeOfService": "REGULAR",
                          "amount": 250.0,
                          "vehicleId": 1,
                          "adhocVehicleId": null,
                          "reason": "Trip Income",
                          "reasonId": 71,
                          "description": null,
                          "remarks": null,
                          "deleteFlag": false
                      }]
                  },
      
      1. 使用带有回调 Fn 的 JS 排序 fn
      this.tripDetails.sort(function(a, b){
        var x = a.vehicleNumber.toLowerCase();
        var y = b.vehicleNumber.toLowerCase();
        if (x < y) {return -1;}
        if (x > y) {return 1;}
        return 0;
      });
      
      

      【讨论】:

        【解决方案3】:

        这条线也很好用。谢谢各位。

        this.regularIncomeDetails.sort((a, b) => a.vehicleNumber.localeCompare(b.vehicleNumber))
        

        【讨论】:

          【解决方案4】:

          您可以使用 Array.prototype.sort() 轻松对 JavaScript 数组进行排序,您可以阅读更多关于 here 的信息。使用自定义的比较函数,您可以轻松地按对象的属性进行排序。

          您需要一个字母数字排序功能,您可以在网上轻松找到该功能。这个函数有两个参数。这些参数与您的数组内容的类型相同,在您的情况下是车辆的对象。您现在必须将参数的 vehicleNumber 传递给排序函数,而不是车辆本身。以下是 Mozilla 文档的摘录,非常适合您的需要:

          可以对对象进行排序,给定其属性之一的值。

          var items = [
            { name: 'Edward', value: 21 },
            { name: 'Sharpe', value: 37 },
            { name: 'And', value: 45 },
            { name: 'The', value: -12 },
            { name: 'Magnetic', value: 13 },
            { name: 'Zeros', value: 37 }
          ];
          
          // sort by value
          items.sort(function (a, b) {
            return a.value - b.value;
          });
          
          // sort by name
          items.sort(function(a, b) {
            var nameA = a.name.toUpperCase(); // ignore upper and lowercase
            var nameB = b.name.toUpperCase(); // ignore upper and lowercase
            if (nameA < nameB) {
              return -1;
            }
            if (nameA > nameB) {
              return 1;
            }
          
            // names must be equal
            return 0;
          });
          

          【讨论】:

            【解决方案5】:
            tripDetails.sort(
             (n1,n2)=>{
                if (n1.vehicleNumber>n2.vehicleNumber) return 1;
                if (n1.vehicleNumber<n2.vehicleNumber) return -1;
                else return 0; 
            })
            

            应该可以解决问题。

            为了对任何类型的数组进行排序,array.sort 方法接受一个函数参数,可以调用该函数参数来比较数组的任意两个成员。如果第一个 arg (n1) 更大,则返回正数,如果两者相等则返回 0,否则返回负数。请参阅https://stackoverflow.com/a/21689268/2940917 了解类似详情。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2020-08-04
              • 1970-01-01
              • 2019-12-07
              • 1970-01-01
              • 2021-04-17
              • 1970-01-01
              • 1970-01-01
              • 2019-09-08
              相关资源
              最近更新 更多