【问题标题】:Sorting an array based on time stamp value from JSON Response根据来自 JSON 响应的时间戳值对数组进行排序
【发布时间】:2013-06-06 06:11:34
【问题描述】:

我的 json 响应中有时间戳值,并且能够正确解析该值。 每个图像都有自己的时间戳值,我需要以递增的时间戳值显示它。这意味着最后更新的图像应该首先加载到我的应用程序中。

时间戳在 JSON 响应中采用以下格式:

Brand1{
"FileName": "520120427043622011.jpg",
 "UpdateTimeStamp": "Jun 10, 2013 8:31:23 AM"
}

Brand2{
"FileName": "Kung_Fu_Fingers.jpg",
"UpdateTimeStamp": "Jun 5, 2013 6:51:12 AM"
}

Brand3{
"FileName": "google_logo1.jpg",
"UpdateTimeStamp": "Jun 10, 2013 8:31:23 AM"
}

谁能指导我使用Javascript或jQuery函数根据时间戳值对上述三个品牌图像项进行排序。 我在拆分 dat 值后使用了排序功能,但它仅按字母顺序对月份进行排序。 请帮助我找到解决方案。

提前致谢。

【问题讨论】:

  • 这是一个数组吗?请分享完整的 JSON。
  • { "FileName": "520120427043622011.jpg", "FileUrl": "myserver.com/files/basic/anonymous/api/library/…", "MimeType": "image/jpeg", "TagName": "my_thumb", "FileLength" :“243319”、“FileDescription”:“测试”、“UpdateTimeStamp”:“2013 年 6 月 10 日上午 7:33:02”},
  • 我能够解析响应。对于基于时间戳值的排序,我需要帮助。我已将时间戳值存储在一个数组中。需要对包含时间戳值的数组进行排序。

标签: javascript jquery html sorting timestamp


【解决方案1】:
var files = [{
"FileName": "520120427043622011.jpg",
 "UpdateTimeStamp": "Jun 10, 2013 8:31:23 AM"
},{
"FileName": "Kung_Fu_Fingers.jpg",
"UpdateTimeStamp": "Jun 5, 2013 6:51:12 AM"
},{
"FileName": "google_logo1.jpg",
"UpdateTimeStamp": "Jun 10, 2013 8:31:23 AM"
}];

files.sort(function(a, b){
    var d1 = new Date(a.UpdateTimeStamp);
    var d2 = new Date(b.UpdateTimeStamp);
    return d1-d2; // d2-d1 for descending order
});

编辑:

对于时间戳数组

var updateTimeStamps = ["Aug 10, 2013 8:31:23 AM","Jun 5, 2013 6:51:12 AM" ,"May 10, 2013 8:31:23 AM"];

updateTimeStamps.sort(function(a, b){
    var d1 = new Date(a);
    var d2 = new Date(b);
    return d1-d2; // d2-d1 for descending order
});

console.log(updateTimeStamps);

编辑 2: 用于保留两个数组和排序

var imgs = ["img1", "img2", "img3"];
var times = ["Jul 10, 2013 8:31:23 AM","Jan 5, 2013 6:51:12 AM" ,"Feb 10, 2013 8:31:23 AM"];

var sorting = [];
times.sort(function(a, b){
    var d1 = new Date(a);
    var d2 = new Date(b);
    var d =  d1-d2; // d2-d1 for descending order
    sorting.push(d);
    return d;
});

imgs.sort(function(a, b){
    return sorting.shift();
});

console.log(times);
console.log(imgs);

【讨论】:

  • callback({ "Brands": [ [{ "FileName": "520120427043622011.jpg", "UpdateTimeStamp": "Jun 10, 2013 8:31:23 AM" },{ "FileName" :“Kung_Fu_Fingers.jpg”,“UpdateTimeStamp”:“2013 年 6 月 5 日上午 6:51:12”},{“文件名”:“google_logo1.jpg”,“UpdateTimeStamp”:“2013 年 6 月 10 日 8:31:23上午" }]; })
  • 我之前已经尝试过上面的代码,它只会按字母顺序返回。例如:8 月、6 月、5 月同样明智,而不是基于上述响应。
  • 您能否解释一下您正在使用的令牌。我需要在代码中使用哪些值。我已将时间戳数据存储在 updatetimestamp 数组中。在上面的代码中,files,a,b 的值是什么?
  • 我需要对数组进行排序 - updatetimestamp 包含获取的时间戳值。
  • 请分享一个示例数组
【解决方案2】:

您可以定义插入排序,它在 O(n) 时间内执行(最佳情况,数组已排序),而 O(n^2) 数组未排序(最坏情况):

function insertionSort(files,attrToSortBy){
  for(var k=1; k < files.length; k++){
     for(var i=k; i > 0 && new Date(files[i][attrToSortBy]) < 
       new Date(files[i-1][attrToSortBy]); i--){

        var tmpFile = files[i];
        files[i] = files[i-1];
        files[i-1] = tmpFile;

     }
  }

}

var files = [{
     "FileName": "520120427043622011.jpg",
     "UpdateTimeStamp": "Jun 10, 2013 8:31:23 AM"
   },{
     "FileName": "Kung_Fu_Fingers.jpg",
     "UpdateTimeStamp": "Jun 5, 2013 6:51:12 AM"
   },{
     "FileName": "google_logo1.jpg",
     "UpdateTimeStamp": "Jun 12, 2013 8:31:23 AM"
}];

insertionSort(files,"UpdateTimeStamp");

console.log('files: ',files);

【讨论】:

  • 当我输入 alert(files); 时,这也会将文件作为 [object Object] 值返回;您将如何获取文件中的值。
  • 我可以使用相同的时间戳值顺序对另外两个数组进行排序吗?
  • 这种排序算法可用于数组、对象和所有其他数据结构。
猜你喜欢
  • 1970-01-01
  • 2020-04-15
  • 2016-09-01
  • 2017-12-06
  • 2013-11-08
  • 1970-01-01
  • 2020-12-15
  • 2014-08-21
  • 2018-08-09
相关资源
最近更新 更多