【问题标题】:Sorted a javascript array of objects by an object property按对象属性对 javascript 对象数组进行排序
【发布时间】:2011-09-06 22:49:27
【问题描述】:

嘿,我有一个对象数组,我需要根据每个对象的特定属性对它们进行排序(DESC 或 ASC)。

这是数据

obj1 = new Object;
obj1.date = 1307010000;

obj2 = new Object;
obj2.date = 1306923600;

obj3 = new Object;
obj3.date = 1298974800;

obj4 = new Object;
obj4.date = 1306923600;

obj5 = new Object;
obj5.date = 1307096400;

data = [obj1,obj2,obj3,obj4,obj5];

现在,我想对数据数组进行排序,以便对象按日期排序。

有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: javascript arrays sorting object


    【解决方案1】:

    使用数组sort()方法

    data.sort(function(a, b){
        return a.date - b.date;
    });
    

    【讨论】:

      【解决方案2】:

      试试这个:

      data.sort(function(a,b){
         return a.date - b.date; //to reverse b.date-a.date
      });
      

      【讨论】:

        【解决方案3】:

        此解决方案适用于任何类型的数据:

        sort_array_by = function(field, reverse, pr){
          reverse = (reverse) ? -1 : 1;
          return function(a,b){
            a = a[field];
            b = b[field];
            if (typeof(pr) != 'undefined'){
              a = pr(a);
              b = pr(b);
            }
            if (a<b) return reverse * -1;
            if (a>b) return reverse * 1;
            return 0;
          }
        }
        

        然后,像这样使用它(反向排序):

        data.sort(sort_array_by('date', true, function(a){
           return new Date(a);
        }));
        

        作为另一个例子,你可以按“整数”类型的属性对其进行排序:

        data.sort(sort_array_by('my_int_property', true, function(a){
           return parseInt(a);
        }));
        

        【讨论】:

          【解决方案4】:

          我们有一个使用 Angular/TypeScript 的应用程序,并发现使用箭头函数在眼睛上稍微容易一些。在我们的例子中,以下代码是我们所拥有的示例:

          data.sort((a, b) => a.SortOrder - b.SortOrder);
          

          变化不大,但是当您有许多要排序的对象时,这会有所帮助。

          【讨论】:

            【解决方案5】:

            您可以使用自定义排序功能:

            function mySort(a,b) {
                return (a.date - b.date);
            }
            data.sort(mySort);
            

            【讨论】:

              【解决方案6】:

              这是我如何使用按升序排序对象数组的示例,此处“数组”是对象数组。复制粘贴到脚本标签中并了解通过控制台工作...

              function OBJECT(){
                  this.PROPERTY1 =Math.floor(Math.random()*10+1) ;
              
              
              }
              
              OBJECT.prototype.getPROPERTY1=function (){
                  return(this.PROPERTY1);
              }
              OBJECT.prototype.setPROPERTY1=function (PROPERTY){
                  this.PROPERTY1=PROPERTY;
              }
              
              var array= new Array();
              console.log("unsorted object")
              for(var a=0;a<10;a++)
              {
              array.push(new OBJECT());
              console.log(array[a].getPROPERTY1())
              }
              
              
              function sorting() {
                  for(var i in array){
                      array[i].setPROPERTY1((array[i].getPROPERTY1()*1))
                           //that is just for sorting an integer value escape this line if not an                                      
                          //integer property
                  }
              
                  var arr=new(Array);
                  var temp1=new(Array);
                  for(var i in array){
                      temp1.push(array[i]);
                  }
                   var temporary=new(Array)
                  for(var i in array)
                  {
                      var temp = array[i].getPROPERTY1();
                      arr.push(temp);
                  }
                  arr.sort(function(a,b){return a-b});
                  //the argument above is very important
              
                  console.log(arr)
                  for(var i in arr){
              
                      for(var j in temp1)
                          if(arr[i]==temp1[j].getPROPERTY1())
                              break;
              
                      temporary.push(temp1[j])
              
              
                      temp1.splice(j,1)//just this statement works for me
              
                  }
                  array.length=0;
                  for(var i in temporary)
                  {
                      array.push(temporary[i])
                  }
              
              
              
              }
              
              
                   sorting();
                    console.log("sorted object")
               for(var a=0;a<10;a++)
               {
                           console.log(array[a].getPROPERTY1())
               }
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2017-05-31
                • 2018-02-07
                • 2016-11-25
                • 1970-01-01
                • 2012-02-20
                相关资源
                最近更新 更多