お世話になります。

文字列の比較が出来ずに困っております。
初歩的な質問で恐縮ですが、ご教授頂けると幸いです。

$.ajax({
url:'http://nuruta.hatenablog.com/rss',
success: function(data){
var htmlstr = "";
var x=0;
var m=0;
var eurl = new Array();
var eurl2 = new Array();

var presentCategory = $("div.entry-categories a:nth-child(2)").text();
var rss_url = 'http://nuruta.hatenablog.com/rss/category/' + presentCategory;

htmlstr += '<ul class="recent-menu">';
$.get(rss_url, function(data) {
$(data).find("item").each(function (i) {
var el = $(this);
eurl[x] = el.find("link").text().replace("/entry","/embed");
// RSSのカテゴリ
eurl2[x]=el.find("category").text()
x++;
});
// 記事のカテゴリ
var cate1 = $("div.entry-categories a").text();

while(eurl.length > 0){
mx=Math.floor(Math.random() * eurl.length);
// カテゴリの比較(※ここが出来ません)
if ( cate1 !== eurl2[mx] ) {
// 完全一致しない時の処理
}
eurl.splice(mx,1);

if (m==10){
break;
}
}
htmlstr += '</ul>';
document.getElementById("recent-box").innerHTML += htmlstr;
});
}
});

回答の条件
  • 1人30回まで
  • 登録:
  • 終了:2017/03/10 06:45:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。
id:nuruta
$.ajax({
	//はてなrssファイルを読み込む
	url:'http://nuruta.hatenablog.com/rss',
	success: function(data){
		var htmlstr = "";
		var x=0;
		var m=0;
		var eurl = new Array();
			
		var presentCategory = $("div.entry-categories a:nth-child(1)").text();
		var rss_url = 'http://nuruta.hatenablog.com/rss/category/' + presentCategory;	

		htmlstr += '<ul class="recent-menu">';
		$.get(rss_url, function(data) {
			$(data).find("item").each(function (i) {
				var el = $(this);
				eurl[x] = el.find("link").text().replace("/entry","/embed");
				x++;
			});
			   
			var href = window.location.href.replace("/entry","/embed");

			while(eurl.length > 0){
				mx=Math.floor(Math.random() * eurl.length);
				if (href != eurl[mx]) {
					htmlstr += '<li>';
					htmlstr += '<iframe style="display: block; height: 180px; width:100%; min-width:200px;" src="' + eurl[mx] + '" frameborder="0" scrolling="no"></iframe>';
					htmlstr += '</li>';
					m=m+1;
				}
				eurl.splice(mx,1);

				if (m==10){
					break;
				}
			}
			htmlstr += '</ul>';
			document.getElementById("tab-body1").innerHTML += htmlstr;
			document.getElementById("MENU1").innerHTML += presentCategory;
		});
	}
});

$.ajax({
	//はてなrssファイルを読み込む
	url:'http://nuruta.hatenablog.com/rss',
	success: function(data){
		var htmlstr = "";
		var x=0;
		var m=0;
		var eurl = new Array();
		var eurl2 = new Array();
			
		var presentCategory = $("div.entry-categories a:nth-child(2)").text();
		var rss_url = 'http://nuruta.hatenablog.com/rss/category/' + presentCategory;	

		htmlstr += '<ul class="recent-menu">';
		$.get(rss_url, function(data) {
			$(data).find("item").each(function (i) {
				var el = $(this);
				eurl[x] = el.find("link").text().replace("/entry","/embed");
				// RSSのカテゴリ
				eurl2[x]=el.find("category").text()
				x++;
			});
			// 記事のカテゴリ
			var cate1 = $("div.entry-categories a").text();
						
			while(eurl.length > 0){
				mx=Math.floor(Math.random() * eurl.length);
				// カテゴリの比較(※ここが出来ません)
				if ( cate1 !== eurl2[mx] ) {
					// 完全一致しない時の処理
					htmlstr += '<li>';
					htmlstr += '<iframe style="display: block; height: 180px; width:100%; min-width:200px;" src="' + eurl[mx] + '" frameborder="0" scrolling="no"></iframe>';
					htmlstr += '</li>';
					m=m+1;
				}
				eurl.splice(mx,1);

				if (m==10){
					break;
				}
			}
			htmlstr += '</ul>';
			document.getElementById("tab-body2").innerHTML += htmlstr;
			document.getElementById("MENU2").innerHTML += presentCategory;
		});
	}
});

回答0件)

回答はまだありません

  • id:psne
    手元の環境では、(ランダムなので)時々「// 完全一致しない時の処理」に入るようです。
  • id:a-kuma3
    「比較ができません」では、何に困ってるのか、よく分からないです。
    「○○となることを期待しているのに、××になってしまう」とか、もう少し具体的に。

    カテゴリを指定した RSS からランダムにひとつ選んで、表示中の記事と比較して、全てのカテゴリが *一致しなければ* 、... というふうには動くようですけれど。
  • id:nuruta
    申し訳ありません。
    投稿文字数の関係で要領の得ない質問となっておりました。

    a-kuma3さんが仰るように「表示中の記事と比較して、全てのカテゴリが一致しない時に、(ソースでは消してますが)はてなブログカードを表示させる」様にさせようと思っております。
    手元の環境では、カテゴリが一致しているものも表示されてしまい、故に、比較が正しく出来ていないのかと疑っていました。

    回答下さったお二方とも出来ていらっしゃるようなので、もう少し自分でも見てみます。
  • id:nuruta
    捕捉に全体のコードを載せます。
    表示されている記事に2つカテゴリがあり、1つ目のカテゴリに関連する記事をtab-body1に表示。
    2つ目のカテゴリに関連する記事をtab-body2に表示させる予定です。

    2つ目のカテゴリの関連記事には、1つ目のカテゴリの関連記事も含まれるため、1つ目のカテゴリの関連記事を除こうとしてカテゴリの比較を行っています。

    (最初はforループで回していたのですが、forの中にfunctionは置けないとエラーが出てしまったので、このような無理矢理なソースにしてしまいました)
  • id:a-kuma3
    ちょっと気になったのは、$.ajax をいきなり呼んでいるところで、ページのロードが完了してからの方が良いんじゃないかなあ、とか、いや .entry-categories は静的に出力されているから関係ないか、とか思ったり。

    $(function() {
     $.ajax({
      ...
     });
    });


    >投稿文字数の関係で
    「質問者からの補足」を使うと良いですよ。
    質問投稿したら、すぐさま補足を足しちゃう。
    こんな感じ。
    http://q.hatena.ne.jp/1471246492

    スーパーpre 記法とか使うと、ソースのインデントもつぶれませんし。
    - http://hatenadiary.g.hatena.ne.jp/keyword/%E5%85%A5%E5%8A%9B%E3%81%97%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89%E3%82%84%E3%81%AF%E3%81%A6%E3%81%AA%E8%A8%98%E6%B3%95%E3%82%92%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%EF%BC%88%E3%82%B9%E3%83%BC%E3%83%91%E3%83%BCpre%E8%A8%98%E6%B3%95%EF%BC%89
    - http://hatenadiary.g.hatena.ne.jp/keyword/%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E8%89%B2%E4%BB%98%E3%81%91%E3%81%97%E3%81%A6%E8%A8%98%E8%BF%B0%E3%81%99%E3%82%8B%EF%BC%88%E3%82%B7%E3%83%B3%E3%82%BF%E3%83%83%E3%82%AF%E3%82%B9%E3%83%BB%E3%83%8F%E3%82%A4%E3%83%A9%E3%82%A4%E3%83%88%EF%BC%89

  • id:nuruta
    色々と申し訳ありません。
    お教え頂いた記法で捕捉を修正しました。
  • id:a-kuma3
    // カテゴリの比較(※ここが出来ません)
    の後に、こんなのを入れて動かしてみると、
    console.log(cate1 !== eurl2[mx], cate1, eurl2[mx], mx);

    こんな感じで出力されるので、判定できてるっぽいんですけどね。
    10:45:51.998 false 【アニメ】その他アニメ 【アニメ】その他アニメ 22
    10:45:52.000 false 【アニメ】その他アニメ 【アニメ】その他アニメ 2
    10:45:52.002 true 【アニメ】その他アニメ 【アニメ】ラブライブ!サンシャイン!!アニメ 1
    10:45:52.004 true 【アニメ】その他アニメ 【アニメ】ラブライブ!サンシャイン!!アニメ 3
    10:45:52.005 true 【アニメ】その他アニメ 【アニメ】ラブライブ!サンシャイン!!アニメ 7
    10:45:52.006 true 【アニメ】その他アニメ 【アニメ】ラブライブ!サンシャイン!!アニメ 0

    ちなみに、Bookmarklet で動かしての確認なので、ブログの方で仕込んだコードとは、動作するタイミングが違ってます。
    で、いきなり $.ajax を呼んでるのが気になる、とかコメントしたわけです。
  • id:nuruta
    $(function() {
    を入れて動かしてみしたが、例えば
    10:45:52.005 true 【アニメ】その他アニメ 【アニメ】ラブライブ!サンシャイン!!アニメ 7
    これも表示されてしまいます。

    比較の部分では無く、全く別の要因が影響しているのでしょうか…。
  • id:nuruta
    申し訳ありません。
    自己解決いたしました。

    2つの配列eurlとeurl2には、同じ配列番号に正しい組み合わせでそれぞれurlと(そのurlが示す記事の)カテゴリが入っているにも関わらず、
    eurl.splice(mx,1);
    で、片方の配列の要素数だけ削除していたことが原因でした。
    片方の要素数が減ったので、組み合わせがずれてしまっていました。

    ぽけっとしすてむさん、a-kuma3さん、お騒がせして申し訳ありませんでした。
    コメントありがとうございました。
  • id:a-kuma3
    >で、片方の配列の要素数だけ削除していたことが原因でした
    ああ、なるほど。
    小一時間くらいで気がつかないとダメだな >a-kuma3
    まだまだ青い (´・ω・`)

    配列をふたつ使うんじゃなくて、オブジェクトの配列にしておけばこういうミスが入り込む余地が無いよなあ、とも思った。

    $(data).find("item").each(function (i) {
      ...
      eurl[x] = {
        link: el.find("link").text().replace("/entry","/embed"),
        category: el.find("category").text(),
      };
      x++;
    });

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません