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

时间:2014-02-04 11:12:34

标签: javascript arrays sorting

给出一系列像这样的对象:

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

这样的字符串数组:

order = [ 'bbbb', 'aaaa', 'cccc' ];

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

2 个答案:

答案 0 :(得分:14)

试试这个:

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' }
];

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

答案 1 :(得分:2)

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

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

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;
  }
}

现在,您可以通过将字符串转换为索引来对数组进行排序:

objects.sort(function(x,y){ return order.indexOf(x.id) - order.indexOf(y.id); });

演示:http://jsfiddle.net/Guffa/u3CQW/

相关问题