-1

以下のような月の値があります

var months = ["January","February","March","April","May","June","July","August","September","October","November","December"];

 var objects = {
        April:0,
        August:4182,
        December:0,
        February:0,
        January:1,
        July:2,
        June:0,
        March:0,
        May:0,
        November:0,
        October:0,
        September:1518
    }

月配列に基づいてオブジェクトをソートする方法は?

4

3 に答える 3

0

プロパティの順序が維持されないため、オブジェクト内のプロパティを並べ替えることができません。そのようなオブジェクトを作成し、プロパティをループアウトすると、オブジェクトに配置したのと同じ順序でプロパティが返されない場合があり、ブラウザによってプロパティが異なる順序で返されることがわかります。

値の順序を維持できるようにオブジェクトを配列にし、文字列を数値に効率的にマップできるようにルックアップ配列をオブジェクトにします。

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/

于 2013-09-19T09:23:48.863 に答える