按对象属性对javascript对象数组进行排序

use*_*531 1 javascript

我正在尝试对数组进行排序.例如,给定数组a(下面),我想返回数组b.

我知道我可以做a.sort(),但是,我不想对实际的数组元素进行排序,而是对数组元素的属性(本例中的s)进行排序.如何实现这一目标?

谢谢

var a=[
  {s:"ced",o:{obj:1}},
  {s:"cde",o:{obj:2}},
  {s:"ade",o:{obj:3}},
  {s:"bde",o:{obj:4}}
]

var b=[
  {s:"ade",o:{obj:3}},
  {s:"bde",o:{obj:4}},
  {s:"cde",o:{obj:2}},
  {s:"ced",o:{obj:1}}
]
Run Code Online (Sandbox Code Playgroud)

Nie*_*sol 7

Array.prototype.sort 接受一个可选参数:一个回调告诉它如何排序.

a.sort(function(x,y) {
    // do something here
    // return -1 if x < y
    // return  1 if x > y
    // otherwise, return 0
});
Run Code Online (Sandbox Code Playgroud)

所以,在你的情况下,它将是:

a.sort(function(x,y) {return x.s == y.s ? 0 : (x.s < y.s ? -1 : 1);});
Run Code Online (Sandbox Code Playgroud)