按字典顺序对基于嵌套值的对象数组进行排序

Sac*_*hin 15 javascript sorting json

使用Javascript,我想知道如何根据每个对象中的字符串值按字典顺​​序对一组对象进行排序.

考虑:

[
 {
    "name" : "bob",
    "count" : true
    "birthday" : 1972
 },
      {
    "name" : "jill",
    "count" : false
    "birthday" : 1922
 },
      {
    "name" : "Gerald",
    "count" : true
    "birthday" : 1920
 }
 ]
Run Code Online (Sandbox Code Playgroud)

如何按名称按字母顺序对数组进行排序?名称值是用户名,所以我想保留字母大小写.

dav*_*vin 33

var obj = [...];

obj.sort(function(a,b){return a.name.localeCompare(b.name); });
Run Code Online (Sandbox Code Playgroud)

请注意,这不会考虑大小写(所以它会在所有以小号开头的所有名称之前订购所有以大写字母开头的名称,例如"Z" < "a"),因此您可能会发现toUpperCase()在其中添加a 是相关的.

你也可以使它更通用:

function sortFactory(prop) {
   return function(a,b){ return a[prop].localeCompare(b[prop]); };
}

obj.sort(sortFactory('name')); // sort by name property
obj.sort(sortFactory('surname')); // sort by surname property
Run Code Online (Sandbox Code Playgroud)

如果你将比较器传递给工厂,那就更通用了......

  • 这个答案不再成立(至少在当前的 chrome 开发控制台上)。`["a", "A", "b", "B"].sort((a,b)=&gt;{return a.localeCompare(b)})` 预期为 `["A", "B ", "a", "b"]` 但返回 `["a", "A", "b", "B"]` (4认同)