在JavaScript中按任意列表对对象数组进行排序

aar*_*ell 6 javascript arrays sorting

给定一个像这样的对象数组:

objects = [
  { id: 'aaaa', description: 'foo' },
  { id: 'bbbb', description: 'bar' },
  { id: 'cccc', description: 'baz' }
];
Run Code Online (Sandbox Code Playgroud)

像这样的字符串数组:

order = [ 'bbbb', 'aaaa', 'cccc' ];
Run Code Online (Sandbox Code Playgroud)

我如何对第一个数组进行排序,以便id属性与第二个数组的顺序相匹配?

Cer*_*rus 16

试试这个:

objects.sort(function(a, b){
    return order.indexOf(a.id) - order.indexOf(b.id)
});
Run Code Online (Sandbox Code Playgroud)

假设变量就像你在问题中声明它们一样,这应该返回:

[
    { id: 'bbbb', description: 'bar' },
    { id: 'aaaa', description: 'foo' },
    { id: 'cccc', description: 'baz' }
];
Run Code Online (Sandbox Code Playgroud)

(它实际上修改了objects变量)