给出一系列像这样的对象:
objects = [
{ id: 'aaaa', description: 'foo' },
{ id: 'bbbb', description: 'bar' },
{ id: 'cccc', description: 'baz' }
];
这样的字符串数组:
order = [ 'bbbb', 'aaaa', 'cccc' ];
我如何对第一个数组进行排序,以便id属性与第二个数组的顺序匹配?
答案 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); });