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

Kar*_*sen 199 javascript sorting jquery multidimensional-array

我有一个对象数组:

var array = [(id, name, value),(id, name, value)]; //and so on
Run Code Online (Sandbox Code Playgroud)

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

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

请帮我!

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

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

Ket*_*tan 389

//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);
Run Code Online (Sandbox Code Playgroud)

  • @Jackson在忽略大小写的同时对数组进行排序. (7认同)
  • 众所周知,这在某些浏览器下会破坏.我正在使用IE8进行项目,但它不适用于这种情况. (5认同)

Håv*_*ard 38

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] 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;
    }
});
Run Code Online (Sandbox Code Playgroud)

sort函数接受一个额外的参数,一个带两个参数的函数.此函数应该返回-1,0或者1取决于排序中应该首先出现的两个参数中的哪一个.更多信息.

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


ken*_*bec 27

//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;
});
Run Code Online (Sandbox Code Playgroud)


Wes*_*Wes 17

data.sort(function(a,b) 
{
   return a.val - b.val;
});
Run Code Online (Sandbox Code Playgroud)


Mik*_*wis 11

排序方法中包含一个可选的参数传递一个自定义的比较功能.

假设你想要一个数组数组:

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);
Run Code Online (Sandbox Code Playgroud)

否则,如果你想要一个对象数组,你可以这样做:

function compareName(a, b)
{

  if (a.name < b.name) return -1;
  if (a.name > b.name) return 1;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)