如何使用 jquery 或 javascript 对对象数组进行排序
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/5503900/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to sort an array of objects with jquery or javascript
提问by Karoline Brynildsen
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])
?
如何让数组按属性名称的升序排序(array[i][1])
?
I've tried to do this: array[i][1].sort()
, but that doesn't work.
我试过这样做:array[i][1].sort()
,但这不起作用。
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?
编辑:为什么这个问题在“重复”问题之前 2 年被问到时被标记为重复?
回答by Ketan
//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);
回答by H?vard
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.
该sort
函数需要一个额外的参数,一个带有两个参数的函数。这个函数应该返回-1
,0
或者1
取决于两个参数中的哪一个应该在排序中排在最前面。更多信息。
I also fixed a syntax error in your multidimensional array.
我还修复了多维数组中的语法错误。
回答by kennebec
//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;
});
回答by Wes
data.sort(function(a,b)
{
return a.val - b.val;
});
回答by Mike Lewis
the sort methodcontains 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;
}
回答by Hacknightly
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 ->
好吧,您似乎没有创建真正的多维数组,而是创建了一个(几乎)JavaScript 对象的数组。尝试像这样定义你的数组 ->
var array = [ [id,name,value], [id,name,value] ]
Hopefully that helps!
希望这有帮助!