No.2ベストアンサー
- 回答日時:
A No1です。
google feed を知りませんので、コードだけではわからないのと、ざっと見ただけですが…
ajaxでのフィードではないのでしょうか?
非同期の場合はinitializeの中での実行順が、callbackの処理順を保証しているとは思えませんが、そのあたりはOKでしょうか?
ソートには関係ないと思いますのでそれは置いておいておくとして…
>entryArray[entryNum].sortDate = ( date.getFullYear()*1000000 ) +
>( (date.getMonth() + 1)*3600*32 ) + ( date.getDate()*3600 ) + ( date.getHours()*60 )
で、日付を数値に置換えているようですが(どういう根拠かよくわかりませんけれど)
そのまま計算すると、例えば
2000/12/31 → 2001494000
2001/01/01 → 2001118800
となるので、順序が逆転していませんか?
Dateも、そのまま数値化してしまえば比較可能なように思います。
var test = [];
test[0] = + new Date("2001/1/2");
test[1] = + new Date("2001/1/1");
test[2] = + new Date("2000/12/30");
test[3] = + new Date("2000/12/31");
test.sort();
for(var i=0; i<test.length; i++) test[i] = new Date(test[i]);
alert(test.join("\n"));
No.1
- 回答日時:
読み込みはフィード毎に行なっているのではないかと思いますが、フィード毎にソートすることが出来ないというのであれば、ソートしている部部のロジックがおかしいと推測されます。
(どのような方法で行なっているのか不明なのでわかりませんが)全体をまとめてソートしたいのであれば、全部の読込みが終了してからソートするかあるいは、それまでに読み込んだものを含めてソートするような処理にしておかないと、ソートのタイミングがおかしいのかも知れません。
仮定が違っていましたら、内容が的外れになっている可能性が大なので、無視してください。
この回答への補足
ソートは全部で30個くらいで、基本的には日付順に並んでいるのですが、
決まった数個のフィードだけ、日付と関係なく、最前部と中間部に表示されてしまいます。。。
同様のスクリプトを使用して、別の複数フィードリストの読み込みページも作っているのですが、
そちらは、問題なく日付順にソートされます。
上記のことから、フィード側に問題があるのかなと思っていたのですが、
偶然エラーが起きていないだけで、スクリプトに問題があるのでしょうか?
参考までに以下がスクリプトを添付いたします。
google.load("feeds", "1");
var entryArray = new Array();
var entryNum = 0;
function initialize() {
feedAdd("***URL_A***","***ブログ名_A***", 2);
feedAdd("***URL_B***","***ブログ名_B***", 1);
}
function feedAdd(rssUrl, rsstitle, boolNum) {
var blogtitle = rsstitle;
var feed = new google.feeds.Feed(rssUrl);
feed.setNumEntries(1);
feed.load(function(result) {
if (!result.error) {
for (var i = 0; i < result.feed.entries.length; i++) {
entryArray[entryNum] = result.feed.entries[i];
var date = new Date(result.feed.entries[i].publishedDate);
entryArray[entryNum].sortDate = ( date.getFullYear()*1000000 ) + ( (date.getMonth() + 1)*3600*32 ) + ( date.getDate()*3600 ) + ( date.getHours()*60 ) + date.getMinutes();
entryArray[entryNum].blogName = blogtitle;
entryNum+=1;
}
}
if(boolNum==1){
feedOutput("feed", 100);
}
});
}
function feedOutput(feedId, listNum){
var useFeed = "";
var useDate = "";
var container = document.getElementById(feedId);
entryArray = asort(entryArray, "sortDate");
if(listNum==100){
listNum = entryNum;
}
for (var i = 0; i < listNum; i++) {
var entry = entryArray[i];
var eimg = "";
var imgCheck = entry.content.match(/(src="http:){1}[\S_-]+((\.jpg)|(\.JPG)|(\.gif)|(\.png))/);
if(imgCheck){
eimg += '<img ' + imgCheck[0] + '" width="" >';
} else {
eimg += '<img src="dammy.gif" width="" >';
}
var date = new Date(entry.publishedDate);
var y = date.getFullYear() ;
var week = new Array('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat') ;
var w = week[date.getDay()];
var m = date.getMonth() + 1;
if (m < 10) {m = "0" + m;}
var d = date.getDate();
if (d < 10) {d = "0" + d;}
var h = date.getHours();
if (h < 10) {h = "0" + h;}
var mn = date.getMinutes();
if (mn < 10) {mn = "0" + mn;}
useDate = m + "月" + d + "日";
useFeed += '<li class=""><a href="' + entry.link + '" target="_blank"><span class=' + '"list_box"><span class=""><h4>' + entry.blogName + '</h4>' + eimg + '</span><h3>' + entry.title + '</h3><span class="">' + y + '.' + m + '.' + d + '.' + w + '</span></span></a></li>';
}
container.innerHTML = useFeed;
}
function asort(myArray, key){
return myArray.sort ( function (b1, b2) { return b1[key] > b2[key] ? -1 : 1; } );
}
google.setOnLoadCallback(initialize);
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
- Excel(エクセル) Excelの50音順ソートを全ての行列に適用するには? 4 2022/12/05 11:28
- Perl RSSにdiv,ul classを付けたいのですがどのようにつけるのかわからないです 2 2022/03/28 01:53
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- USBメモリー・SDカード・フラッシュメモリー PDF文書をCD-Rで配るときの注意事項 4 2022/03/31 16:49
- Chrome(クローム) 最近のGoogle Chromeのデータ読み込みの遅延やエラーって頻発しますか? 2 2023/01/06 22:12
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- Excel(エクセル) 重複しているか否かをソートせずに判断する方法ありますか? 2 2022/07/06 21:16
- HTML・CSS Dreamweaver のテンプレートでの相対パスの設定について 2 2023/06/13 17:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
同じIDで定義した要素の配列を...
-
jspからjavascriptの変数引継ぎ
-
undefinedを表示させない方法は...
-
配列の初期化
-
C#テキストボックスの文字を配...
-
JSONデータを50音順でソートしたい
-
配列を作って総当たりで距離を...
-
テトリス / 配列をブロックに...
-
二次元配列を使って順位をだす...
-
JavaScript window.openで開く...
-
javascriptでiframeのURL変更は?
-
ボタンをクリックすると数が増...
-
functionから別のfunctionを実...
-
C#で、ContextMenuStripに動的...
-
クリックすると上に開くアコー...
-
画像上のクリックした場所が分...
-
webページ上のTabキーの動き
-
var_dumpのdump意味はを知りた...
-
hoge の謎
-
Boolean型配列中のTrueの有無を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C#テキストボックスの文字を配...
-
同じIDで定義した要素の配列を...
-
jspからjavascriptの変数引継ぎ
-
javascript 変数名の連結をしたい
-
undefinedを表示させない方法は...
-
二次元配列を使って順位をだす...
-
javascriptで2つのArrayの...
-
複数のフィードの読み込みが日...
-
二次元配列の全要素の全要素を...
-
javascriptを用いて作成された...
-
("Scripting.Dictionary")につ...
-
javascriptで行を抽出したいです。
-
JavaScriptで簡単なクイズを作...
-
1から20までの整数から、重複な...
-
javascriptついてお聞きします。
-
ぷよぷよの消去アルゴリズムが...
-
配列を作って総当たりで距離を...
-
配列の数ではなく、文字列の長...
-
jQueryで文字数カウンタ(複数...
-
jQuery text()で、<br>タグも取...
おすすめ情報
