您无法对对象中的属性进行排序,因为属性的顺序未得到维护。如果像这样创建一个对象,然后循环出属性,你会看到属性返回的顺序可能与你放入对象中的顺序不同,并且不同的浏览器会以不同的顺序返回属性。
使对象成为一个数组,以便它可以保持值的顺序,并使查找数组成为一个对象,以便您可以有效地将字符串映射到数值:
var months = {
January: 1,
February: 2,
March: 3,
April: 4,
May: 5,
June: 6,
July: 7,
August: 8,
September: 9,
October: 10,
November: 11,
December: 12
};
var objects = [
{ name: 'April', value: 0 },
{ name: 'August', value: 4182 },
{ name: 'December', value: 0 },
{ name: 'February', value: 0 },
{ name: 'January', value: 1 },
{ name: 'July', value: 2 },
{ name: 'June', value: 0 },
{ name: 'March', value: 0 },
{ name: 'May', value: 0 },
{ name: 'November', value: 0 },
{ name: 'October', value: 0 },
{ name: 'September', value: 1518 }
];
现在您可以使用对象对数组进行排序:
objects.sort(function(x,y) { return months[x.name] - months[y.name]; });
演示:http: //jsfiddle.net/7eKfn/