按对象属性对对象的javascript数组进行排序

按对象属性对对象的javascript数组进行排序,javascript,arrays,sorting,object,Javascript,Arrays,Sorting,Object,嘿,我有一个对象数组,我需要根据每个对象的特定属性对它们进行排序(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.da

嘿,我有一个对象数组,我需要根据每个对象的特定属性对它们进行排序(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];
现在,我想对数据数组进行排序,以便对象按日期排序

有人能帮我吗?

使用数组方法

试试这个:

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

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

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

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

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;
  }
}
另一个例子是,您可以按“integer”类型的属性对其进行排序:


这是一个我如何使用升序排序对象数组的示例,这里“数组”是对象数组。复制粘贴到脚本标记中并理解如何通过控制台工作

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())
 }
函数对象(){
this.PROPERTY1=Math.floor(Math.random()*10+1);
}
OBJECT.prototype.getPROPERTY1=函数(){
返还(本财产1);
}
OBJECT.prototype.setPROPERTY1=函数(属性){
此.PROPERTY1=属性;
}
var数组=新数组();
log(“未排序的对象”)

对于(var a=0;a我们有一个使用Angular/TypeScript的应用程序,发现使用arrow函数对眼睛来说稍微容易一些。在我们的例子中,下面的代码就是我们的示例:

data.sort((a, b) => a.SortOrder - b.SortOrder);
这不是一个很大的改变,但是当你有很多对象需要排序时,这会帮助你更多

data.sort(sort_array_by('my_int_property', true, function(a){
   return parseInt(a);
}));
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())
 }
data.sort((a, b) => a.SortOrder - b.SortOrder);