按花费的时间对数组进行排序,格式化(“86:43”)

时间:2013-10-10 17:00:45

标签: javascript sorting

我有一个数小时的数组作为值。我希望以最高时间排序,最低时间排在最后(降序)。我能找到的所有例子都是处理时间,即(“下午5点43分”),而不是与一天中的时间无关的小时数。这是一个示例数组,

timeLog = [{client1 : "03:14"},{ client2 : "26:22"},{ client3: "09:56"}];

我想将它排序为这样,

timeLog = [{ client2 : "26:22"},{ client3: "09:56"},{client1 : "03:14"}];

有没有人有这个想法?既不是日期/时间也不是单独的数字,它给了我相当困难的时间。

2 个答案:

答案 0 :(得分:2)

See my fiddle.

timeLog = [{client1 : "03:14"},{ client1 : "26:22"},{ client1: "09:56"}];

timeLog = timeLog.sort(function(a, b) {
    if(a.client1 > b.client1) return -1;
    if(a.client1 < b.client1) return 1;
    return 0;    
})

console.log(JSON.stringify(timeLog));

只要您在每个对象中没有不同的key名称,这是有效的,这在您的示例中完全没有必要。如果每个都不同,为什么不只是制作一个数组:

timeLog = ["03:14", "26:22", "09:56"];

或者,如果需要贴上标签,请执行以下操作:

var timeLog = [
  { name: 'client1', value: "03:14" },
  { name: 'client2', value: "26:22" },
  { name: 'client3', value: "09:56"}
];

timeLog = timeLog.sort(function(a, b) {
    if(a.value > b.value ) return -1;
    if(a.value < b.value ) return 1;
    return 0;    
})

更新

我在排序上犯了一个错误,我更新了我的代码并相应地调整了一下。

答案 1 :(得分:1)

因为没有JSON对象键的顺序,所以你需要重构你的JSON,或者循环遍历键并中断第一个索引。

此处的工作示例(使用您当前的timeLog var):

var timeLog = [{client1 : "03:14"},{ client2 : "26:22"},{ client3: "09:56"}];

sorted = timeLog.sort(function(a, b) {
    for (var propa in a) {
        if(a.hasOwnProperty(propa)) {
            for (var propb in b) {
                if(b.hasOwnProperty(propb)) {
                    return a[propa] > b[propb] ? -1 : 1
                }
                break;
            }        
        } 
        break;
    }
});
console.log(sorted)

fiddle here

您应首先尝试在应用程序中正确重构JSON对象。