0

我有一个以小时数为值的数组。我想以最多时间在顶部和最少时间在底部(降序)对它进行排序。我能找到的所有例子都是处理时间,即(“5:43 pm”)而不是与一天中的时间无关的小时数。这是一个示例数组,

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

我想把它排序成这样,

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

有人在这里有想法吗?既不是日期/时间也不是数字,这让我很难过。

4

2 回答 2

2

看我的小提琴。

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;    
})

更新

我在排序时犯了一个错误,我更新了我的代码并相应地摆弄。

于 2013-10-10T17:22:53.433 回答
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)

在这里摆弄

不过,您应该首先尝试在应用程序中正确重组 JSON 对象。

于 2013-10-10T17:36:00.583 回答