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

JavaScript中按任意列表对对象数组排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,给定如下对象数组: objects = [ { id: 'aaaa', description: 'foo' }, { id: 'bbbb', description: 'bar' }, { id: 'cccc', description: 'baz' } ]; order = [ 'bbbb', 'aaaa', 'cccc' ]; 还有一个字符串数组,如下所示: objects = [ { id: 'aaaa', description: 'foo' }, { id:

给定如下对象数组:

objects = [
  { id: 'aaaa', description: 'foo' },
  { id: 'bbbb', description: 'bar' },
  { id: 'cccc', description: 'baz' }
];
order = [ 'bbbb', 'aaaa', 'cccc' ];
还有一个字符串数组,如下所示:

objects = [
  { id: 'aaaa', description: 'foo' },
  { id: 'bbbb', description: 'bar' },
  { id: 'cccc', description: 'baz' }
];
order = [ 'bbbb', 'aaaa', 'cccc' ];
如何对第一个数组进行排序,使id属性与第二个数组的顺序相匹配?

尝试以下方法:

objects.sort(function(a, b){
    return order.indexOf(a.id) - order.indexOf(b.id)
});
假设变量与您在问题中声明的相同,则应返回:

[
    { id: 'bbbb', description: 'bar' },
    { id: 'aaaa', description: 'foo' },
    { id: 'cccc', description: 'baz' }
];

(它实际上修改
对象
变量)

您需要一种方法将字符串转换为数组中的位置,即数组的函数索引

在较新的浏览器中有一个,但要向后兼容,如果没有,则需要添加:

if (!Array.prototype.indexOf) {
  Array.prototype.indexOf = function(str) {
    var i;
    for (i = 0; i < this.length; i++) if (this[i] == str) return i;
    return -1;
  }
}

演示:

当任何列表中缺少元素时,会发生什么情况?