我有一个数小时的数组作为值。我希望以最高时间排序,最低时间排在最后(降序)。我能找到的所有例子都是处理时间,即(“下午5点43分”),而不是与一天中的时间无关的小时数。这是一个示例数组,
timeLog = [{client1 : "03:14"},{ client2 : "26:22"},{ client3: "09:56"}];
我想将它排序为这样,
timeLog = [{ client2 : "26:22"},{ client3: "09:56"},{client1 : "03:14"}];
有没有人有这个想法?既不是日期/时间也不是单独的数字,它给了我相当困难的时间。
答案 0 :(得分: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;
})
我在排序上犯了一个错误,我更新了我的代码并相应地调整了一下。
答案 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)
您应首先尝试在应用程序中正确重构JSON对象。