3

json 応答にタイムスタンプ値があり、その値を適切に解析できます。各画像には独自のタイムスタンプ値があり、増加するタイムスタンプ値で表示する必要があります。つまり、最後に更新された画像を最初にアプリケーションにロードする必要があります。

タイムスタンプは、JSON Response で次の形式になっています。

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関数を使用して、タイムスタンプ値に基づいて上記の3つのブランドの画像アイテムをソートする方法を教えてください。dat値を分割した後にソート機能を使用しましたが、月をアルファベット順にのみソートしています。これに対する解決策を見つけるのを手伝ってください。

前もって感謝します。

4

2 に答える 2

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

EDIT 2: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);
于 2013-06-10T14:50:39.910 に答える
3

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);
于 2013-06-10T15:36:38.903 に答える