根据对象的一个​​属性对JavaScript对象数组进行sorting

我有一个对象数组,每个对象都有一个属性name ,一个string。 我想通过这个属性来sorting数组。 我想他们按以下方式sorting..

 `ABC` `abc` `BAC` `bac` etc... 

我将如何实现这个JavaScript?

有两个基本的方法:

 var arr = [{name:"ABC"},{name:"BAC"},{name:"abc"},{name:"bac"}]; arr.sort(function(a,b){ var alc = a.name.toLowerCase(), blc = b.name.toLowerCase(); return alc > blc ? 1 : alc < blc ? -1 : 0; }); 

要么

 arr.sort(function(a,b){ return a.name.toLowerCase().localeCompare(b.name.toLowerCase()); }); 

请注意,第二个版本忽略变音符号,所以aà会被sorting为同一个字母。

现在,这两种方式的问题是,他们不会在小写abc之前对大写字母ABC进行sorting,因为它会将它们视为相同。

要解决这个问题,你必须这样做:

 arr.sort(function(a,b){ var alc = a.name.toLowerCase(), blc = b.name.toLowerCase(); return alc > blc ? 1 : alc < blc ? -1 : a.name > b.name ? 1 : a.name < b.name ? -1 : 0; }); 

再次,在这里,你可以select使用localeCompare而不是像下面这样使用变音符来影响sorting:

 arr.sort(function(a,b){ var lccomp = a.name.toLowerCase().localeCompare(b.name.toLowerCase()); return lccomp ? lccomp : a.name > b.name ? 1 : a.name < b.name ? -1 : 0; }); 

你可以在这里阅读更多关于sorting: https : //developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort

您可以将一个sorting函数引用传递给Array.sort 。

 objects.sort(function(c, d) { return ( c['name'].toLowerCase() > d['name'].toLowerCase() || c['name'] > d['name'] ) ? 1 : -1; }); 

看到那里http://jsfiddle.net/p8Gny/1/

您可以将自定义sorting函数传递给数组的sort()方法。 以下将做的伎俩,并考虑到您的资本化要求。

 objects.sort(function(o1, o2) { var n1 = o1.name, n2 = o2.name, ni1 = n1.toLowerCase(), ni2 = n2.toLowerCase(); return ni1 === ni2 ? (n1 === n2 ? 0 : n1 > n2 ? 1 : -1) : (ni1 > ni2 ? 1 : -1); }); 

对排列对象数组稍作修改,

 yourobject.sort(function(a, b) { var nameA = a.name, nameB = b.name if (nameA < nameB) //Sort string ascending. return -1 if (nameA > nameB) return 1 return 0 //Default return value (no sorting). })