0

indexOf と if (x in y) を使用していくつかの方法を試しましたが、どれも私が望むことを正確に行うようには見えません。

いくつかのオブジェクトを調べて、オブジェクトに応じて特定の番号/タイムスタンプ/日付を見つける必要があります。これは、私のオブジェクトのコンソールのスクリーンショットです。

何かご意見は? ここに画像の説明を入力

具体的には、最初にデータを取得するときに、API 応答からすべてのタイムスタンプ (日付/時刻に投稿) を抽出します。そのタイムスタンプの配列を使用して、すべての応答から最新の投稿されたオブジェクトを見つけようとしています。

その他のスクリーン キャプチャを次に示します。

ツイッターcreated_atのタイムスタンプ Twitter created_at タイムスタンプ

タンブラーtimestamp タンブラーのタイムスタンプ

そして私の日付配列 ここに画像の説明を入力

そして、私のコードは、情報を引き出して並べ替えるために使用されていました。

//AJAX CALLS
$.when(
    //Bitter Syndrome
    $.ajax({
        type: "GET",
        dataType: "jsonp",
        cache: false,
        url: "http://api.tumblr.com/v2/blog/"+bittersymdrome_tumblr+"/posts/?api_key="+tumblr_apiKey,
        success: function(data){
            delete data.meta; delete data.response.blog;
            blogs.content.push(data);
        }
    }),

    //moundsMusic Tumblr
    $.ajax({
        type: "GET",
        dataType: "jsonp",
        cache: false,
        url: "http://api.tumblr.com/v2/blog/"+moundsmusic_tumblr+"/posts/?api_key="+tumblr_apiKey,
        success: function(data){
            delete data.meta; delete data.response.blog;
            blogs.content.push(data);
        }
    }),

    //GateWayDrugSTL Tumblr
    $.ajax({
        type: "GET",
        dataType: "jsonp",
        cache: false,
        url: "http://api.tumblr.com/v2/blog/"+gatewaydrug_tumblr+"/posts/?api_key="+tumblr_apiKey,
        success: function(data){
            delete data.meta; delete data.response.blog;
            blogs.content.push(data);
        }
    }),

    //GateWayDrugSTL Twitter
    $.ajax({
        type: "GET",
        dataType: "jsonp",
        cache: false,
        url: "http://api.twitter.com/1/statuses/user_timeline.json?user_id="+gatewaydrug_twitter,
        success: function(data){
            blogs.content.push( data );
            /*var time = data[0].created_at;
            gwdtwDate = Date.parse(time)/1000;*/
        }
    })
).done( function(){
    //Get and Sort Dates most recent first.
    for(var i=0;i<blogs.content.length;i++){
        if(!blogs.content[i].length){
            for(var e=0; e<blogs.content[i].response.posts.length; e++){
                blogs.dates.push(blogs.content[i].response.posts[e].timestamp);
            }
        } else {
            for (var e = 0; e<blogs.content[i].length; e++){
                var time = blogs.content[i][e].created_at;
                gatewaydrug_twitter_date = Date.parse(time)/1000;
                blogs.dates.push(gatewaydrug_twitter_date);
            }
        }
    }
    blogs.dates.sort(function(a,b){return b-a});
    console.log( blogs );

    for(var i=0,len=blogs.dates.length; i<len;i++){

    }
});

以下は、ブラウザ コンソールでオブジェクトを表示できるテスト サーバーへのライブ リンクです

4

1 に答える 1

1

同じ配列内で異なるオブジェクトタイプを混在させないでください。ただし、前にそれらを正規化してください。また、グローバル変数を使用する必要はなくblogs、代わりにDeferredsを適切に使用してください。

function handleTumblrResponse(data) {
    delete data.meta;          // actually, you don't
    delete data.response.blog; // need those
    var resultdates = [];
    for (var e=0; e<data.response.posts.length; e++)
        resultdates.push(data.response.posts[e].timestamp);
    return resultdates;
}
function handleTwitterResponse(data) {
    var resultdates = [];
    for (var e = 0; e<data.length; e++){
        var timesting = data[e].created_at;
        var date = Date.parse(time)/1000;
        resultdates.push(date);
    }
    return resultdates;
}
$.when(
    // those get… functions are the plain ajax calls, no success handlers
    getBitterSyndromeAjax().then(handleTumblrResponse),
    getMoundsMusicTumblr().then(handleTumblrResponse),
    getGateWayDrugSTLTumblr().then(handleTumblrResponse),
    getGateWayDrugSTLTwitter().then(handleTwitterResponse)
).done(function(bitterSyndrom, moundsMusic, drugsTumb, drugsTwit) {
    // concat the four arrays to one
    var dates = Array.prototype.concat.apply([], arguments);
    dates.sort(function(a,b){return b-a});
    // do something with the timestamps
});

ところで、Date.parseはその奇妙なTwitter形式を処理できないと確信しています。代わりに、

function fromDateString(str) {
    var res = str.match(/(\S{3})\s(\d{2})\s(\d+):(\d+):(\d+)\s(?:([+-])(\d\d)(\d\d)\s)?(\d{4})/);
    if (res == null)
        return NaN; // or something that indicates it was not a DateString
    var time = Date.UTC(
      +res[9],
      {"Jan":0,"Feb":1,"Mar":2, …, "Dec":11}[res[1]] || -1,
      +res[2],
      +res[3],
      +res[4],
      +res[5], 
    );
    if (res[6] && res[7] && res[8]) {
        var dir = res[6] == "+" ? -1 : 1,
            h = parseInt(res[7], 10),
            m = parseInt(res[8], 10);
        time += dir * (h*60+m) * 60000;
    }
    return time;
}
于 2012-12-04T20:52:47.213 に答える