如何使用jquery或javascript对对象数组进行排序

How to sort an array of objects with jquery or javascript

本问题已经有最佳答案,请猛点这里访问。

我有一组对象:

1
var array = [(id, name, value),(id, name, value)]; //and so on

如何按属性名称(array[i][1])的升序排列数组?

我试过这样做:array[i][1].sort(),但这不起作用。

请帮帮我!

编辑:数组可以包含两个以上的对象!它可以包含数百个。

编辑:为什么这个问题在"重复"问题2年前被问到时被标记为重复?


1
2
3
4
5
6
7
8
//This will sort your array
function SortByName(a, b){
  var aName = a.name.toLowerCase();
  var bName = b.name.toLowerCase();
  return ((aName < bName) ? -1 : ((aName > bName) ? 1 : 0));
}

array.sort(SortByName);


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var array = [[1,"grape", 42], [2,"fruit", 9]];

array.sort(function(a, b)
{
    // a and b will here be two objects from the array
    // thus a[1] and b[1]&nbsp;will equal the names

    // if they are equal, return 0 (no sorting)
    if (a[1] == b[1]) { return 0; }
    if (a[1] > b[1])
    {
        // if a should come after b, return 1
        return 1;
    }
    else
    {
        // if b should come after a, return -1
        return -1;
    }
});

sort函数接受一个附加参数,一个接受两个参数的函数。此函数应返回-101,具体取决于排序时两个参数中哪一个应排在第一位。更多信息。

我还修复了多维数组中的语法错误。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//objects
var array = [{id:'12', name:'Smith', value:1},{id:'13', name:'Jones', value:2}];
array.sort(function(a, b){
    var a1= a.name.toLower(), b1= b.name.toLower();
    if(a1== b1) return 0;
    return a1> b1? 1: -1;
});

//arrays
var array =[ ['12', ,'Smith',1],['13', 'Jones',2]];
array.sort(function(a, b){
    var a1= a[1], b1= b[1];
    if(a1== b1) return 0;
    return a1> b1? 1: -1;
});


1
2
3
4
data.sort(function(a,b)
{
   return a.val - b.val;
});


sort方法包含一个可选参数,用于传递自定义比较函数。

假设您需要数组:

1
2
3
4
5
6
7
8
9
10
var arr = [[3,"Mike", 20],[5,"Alex", 15]];

function compareName(a, b)
{

  if (a[1] < b[1]) return -1;
  if (a[1] > b[1]) return 1;
  return 0;
}
arr.sort(compareName);

否则,如果需要对象数组,可以执行以下操作:

1
2
3
4
5
6
7
function compareName(a, b)
{

  if (a.name < b.name) return -1;
  if (a.name > b.name) return 1;
  return 0;
}

好吧,看起来您没有创建真正的多维数组,而是创建了一个(几乎)javascript对象数组。尝试像这样定义数组->

1
var array = [ [id,name,value], [id,name,value] ]

希望有帮助!