可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
This question already has an answer here:
-
Sorting an array of JavaScript objects
25 answers
I have an array of objects:
var array = [(id, name, value),(id, name, value)]; //and so on
How do I get the array to be sorted in ascending order of the atribute name (array[i][1])
?
I\'ve tried to do this: array[i][1].sort()
, but that doesn\'t work.
Please help me!
Edit: the array can contain more than two objects! It can contain hundreds.
Edit:
Why is this question marked as a duplicate, when it was asked 2 years before the \"duplicated\" question?
回答1:
//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);
回答2:
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;
}
});
The sort
function takes an additional argument, a function that takes two arguments. This function should return -1
, 0
or 1
depending on which of the two arguments should come first in the sorting. More info.
I also fixed a syntax error in your multidimensional array.
回答3:
//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;
});
回答4:
data.sort(function(a,b)
{
return a.val - b.val;
});
回答5:
the sort method contains an optional argument to pass a custom compare function.
Assuming you wanted an array of arrays:
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);
Otherwise if you wanted an array of objects, you could do:
function compareName(a, b)
{
if (a.name < b.name) return -1;
if (a.name > b.name) return 1;
return 0;
}
回答6:
Well, it appears that instead of creating a true multidimensional array, you\'ve created an array of (almost) JavaScript Objects. Try defining your arrays like this ->
var array = [ [id,name,value], [id,name,value] ]
Hopefully that helps!