根据对象的一个属性对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; });
您可以将自定义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). })