JavaScript中通过特定键对对象数组进行排序的最紧凑方式是什么,其中排序顺序是在数组中定义的?

Ms.*_*lib 2 javascript sorting algorithm

这就是我的意思.假设我有一个像这样的对象数组

var objs = [ { foo: 5, bar: "something"}, 
             { foo: 4912, bar: "blah" }, 
             { foo: -12, bar: "hehe" } ];
Run Code Online (Sandbox Code Playgroud)

和一个定义bar值的排序的数组,比如

var arr = ["blah", "something", "hehe"]
Run Code Online (Sandbox Code Playgroud)

是否有JavaScript的得到一个版本的一个很好的方式objs

[ { foo: 4912, bar: "blah" }, 
  { foo: 5, bar: "something"}
  { foo: -12, bar: "hehe" } ];
Run Code Online (Sandbox Code Playgroud)

???

我知道的最好的方式是

objs.sort(function(x,y){
    var ix = arr.indexOf(x), 
        iy = arr.indexOf(y);
    if(ix<iy) return -1;
    else if(ix==iy) return 0;
    else return 1;
});
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有一种更紧凑的方式.

ama*_*ksr 5

你可以稍微重构一下sort函数:

objs.sort(function(x,y){
    var ix = arr.indexOf(x), 
        iy = arr.indexOf(y);
    return ix-iy;
});
Run Code Online (Sandbox Code Playgroud)

此外,为了获得更好的性能,您可能希望摆脱indexOf函数,并将sort数组加载到hash中:

var arr = {
    "blah" :0,
    "something":1,
     "hehe":2};
Run Code Online (Sandbox Code Playgroud)

排序功能如下所示:

objs.sort(function(x,y){
    return arr[x.bar]-arr[y.bar];
});
Run Code Online (Sandbox Code Playgroud)