将Months排序为Array

时间:2014-10-24 14:19:32

标签: javascript sorting date dictionary

我有一个日期和对应的词典

dates = {'01.02.2014':'2', '02.03.2014':'5', '10.03.2014':'9', '20.06.2014':'7'}

我需要的是所有月份的新词典"日期"字典。

Feb = {'01.02.2014':'2'};
March = {'02.03.2014':'5', '10.03.2014':'9'};
Jun = {'20.06.2014':'7'};

有没有一种快捷的方法来实现这一目标?

非常感谢,

最好的问候

琳达

3 个答案:

答案 0 :(得分:2)

与其他人一样,循环遍历对象并构建一个新对象:

var dates = {'01.02.2014':'2', '02.03.2014':'5', '10.03.2014':'9', '20.06.2014':'7'}
var months = {'01':'Jan','02':'Feb','03':'Mar','04':'Apr','05':'May','06':'Jun',
              '07':'Jul','08':'Aug','09':'Sep','10':'Oct','11':'Nov','12':'Dec'};
var dates2 = {};

// Requires ES5
Object.keys(dates).forEach(function(key) {
  var obj = {};
  obj[key] = dates[key];
  dates2[months[key.split('.')[1]]] = obj;
})

console.log(dates2);

或者为了更好的兼容性(可能还有速度),你可以使用普通的for..in循环:

for (var key in dates) {
  var obj = {};
  obj[key] = dates[key];
  dates2[months[key.split('.')[1]]] = obj;
}

答案 1 :(得分:1)

没有特殊技巧来快速完成此任务。只需遍历您的数据结构并将元素放在另一个数据结构中。

答案 2 :(得分:0)

var dates = {'01.02.2014':'2', '02.03.2014':'5', '10.03.2014':'9'};

// Create a map to translate numbers to months 
var map = {  
    '01': 'Jan',
    '02': 'Feb',
    '03': 'Mar' // etc...
};

var ret = {};

for(var key in dates){

    var monthKey = key.split('.')[1], // Get month
        translated = map[monthKey], // Translate to text
        kvp = {};

    kvp[key] = dates[key];

    if(!ret[translated]) // Add new month prop if not exist
        ret[translated] = kvp;
    else // Add prop to existing month
        ret[translated][key] = dates[key];  
}

console.log(ret);

http://jsfiddle.net/xpm5enrj/