のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,548,765人
昨日:no data人
今日:
最近の注目
人気の最安値情報

    私的良スレ書庫

    不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
    ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

    元スレ+ JavaScript の質問用スレッド vol.100 +

    JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニュー
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    レスフィルター : (試験中)
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    851 : Name_Not - 2012/06/07(木) 00:13:50.05 ID:Ue5itF0d (+22,+29,-28)
    >>850
    中味がオブジェクトか否かを見ながら再起
    852 : Name_Not - 2012/06/07(木) 00:14:07.62 ID:Ue5itF0d (+21,+28,-2)
    まちがえた
    再帰
    853 : 850 - 2012/06/07(木) 00:19:53.95 ID:WPGDDDD6 (+27,+29,-16)
    すいません。わからないのでコード教えて下さい。
    再帰しすぎるとよくないという話も聞きましたが。。多分、実際のコードでは階層が
    千におよぶと思います。
    854 : Name_Not - 2012/06/07(木) 00:30:53.80 ID:Ue5itF0d (-3,-30,-149)
    >>853
    大雑把に書くとこんな

    (function(obj){
      for(var n in obj){
        if( obj[n]がオブジェクト ) arguments.callee(obj[n]);
        else obj[n]を煮るなり焼くなり;
      }
    })(走査したいオブジェクト);

    オブジェクトが大きすぎて実行速度が現実的でないならば
    再帰するときにsetTimeoutとか挟んで非同期実行的な感じにするとか
    855 : 850 - 2012/06/07(木) 00:48:52.87 ID:WPGDDDD6 (-6,+27,-10)
    >>854
    ありがとうございます。トライしてみます。
    856 : Name_Not - 2012/06/07(木) 01:43:42.78 ID:??? (+66,+30,-43)
    >>853
    >再帰しすぎるとよくない
    そんな、健康法みたいなw
    古い言語や機械だと、再帰でスタックを食い潰す事があったから、
    多分その事を言ってるんだと思う。
    今時の言語や機械なら、よほど深くならない限りは大丈夫。
    857 : Name_Not - 2012/06/07(木) 02:17:10.52 ID:??? (+52,+29,-3)
    今時でも再帰しすぎはよくねーよアホ
    858 : Name_Not - 2012/06/07(木) 02:20:26.68 ID:Ue5itF0d (+32,+29,-53)
    「再帰いくない」「いや問題ない」って聞いて
    理由がわからないまま盲目的にどちらかを信じるのがよくねーですな

    自分は深くなるときは>>854のようにsetTimeoutで遅延させるんだけど
    もっと賢いやり方を教えて欲しい
    859 : Name_Not - 2012/06/07(木) 02:31:34.81 ID:??? (+57,+29,-16)
    大きすぎるなら再帰なしで書くしかないでしょ。
    860 : Name_Not - 2012/06/07(木) 04:20:00.27 ID:??? (+57,+29,-19)
    構造が固定なら決めうちでいい

    固定じゃないならセイウチ
    861 : Name_Not - 2012/06/07(木) 05:23:46.53 ID:??? (+126,+29,-10)
    関数呼び出しで時間くうからウン万回と再帰するなら強引にループに直したほうがいいぜ
    862 : Name_Not - 2012/06/07(木) 05:58:41.22 ID:??? (-1,-29,-24)
    JSON.stringify(obj) して、文字列検索を…なんちゃって。
    863 : Name_Not - 2012/06/07(木) 06:24:10.51 ID:??? (+64,+29,+0)
    >>861
    ああなるほど
    864 : Name_Not - 2012/06/07(木) 08:22:58.76 ID:??? (+62,+29,-19)
    >>849
    いや、だからそれが発端でいろいろ整理された結果が現状なんだけど、またその発端の
    方がいいということ?
    865 : Name_Not - 2012/06/07(木) 08:37:10.02 ID:??? (+47,+29,-4)
    今のでええよ
    866 : Name_Not - 2012/06/07(木) 08:38:17.05 ID:??? (+74,+29,-61)
    >>850-861 1000レベルの再帰はどのみち動かないでしょ。
    >>861-862 文字列にしたら構造が取れなくなるし、1000レベルあるってことは何MBもの文字列?
    スタックを使って再帰をループに変換とか定石だと思うんだけど、なぜか
    スタックに言及する人が誰もいないという。
    867 : Name_Not - 2012/06/07(木) 08:47:35.84 ID:??? (+3,-30,-148)
    とりあえず、1000レベルの階層作ってスタックでたどってみました。
    <!DOCTYPE html>
    <html><head><title>???</title>
    </head><body>
    <pre><script type="text/javascript">
    var obj = new Object(); obj.a0 = 0;
    for(var i = 1; i <= 1000; ++i) {
    var o = new Object(); o['a'+i] = i; o['b'+i] = obj; obj = o;
    }
    var stack = []; stack.push(obj);
    while(stack.length > 0) {
    var e = stack.pop();
    for(var k in e) {
    if(e[k] instanceof Object) {
    document.writeln('prop ' + k + ': object'); stack.push(e[k]);
    } else {
    document.writeln('prop ' + k + ': ' + e[k]);
    }
    }
    }
    </script></pre>
    </body></html>
    868 : Name_Not - 2012/06/07(木) 11:59:44.57 ID:??? (+91,+29,-4)
    テストデータとして、枝は2本以上ある方がいいのでは。
    869 : Name_Not - 2012/06/07(木) 12:11:09.02 ID:??? (-6,-29,+0)
    > new Object()
    870 : Name_Not - 2012/06/07(木) 12:14:16.22 ID:??? (+69,+29,-17)
    >>868-869 ぜひとも改良版の投稿を期待しますよ。
    871 : Name_Not - 2012/06/07(木) 12:17:25.19 ID:??? (+57,+29,-2)
    投稿しても無視だしもういいよ。勝手にやってろよ
    872 : Name_Not - 2012/06/07(木) 12:18:52.22 ID:??? (-1,-29,-17)
    <title>???</title> の人のテンプレがHTML5仕様になってて和んだ
    873 : Name_Not - 2012/06/07(木) 12:36:42.63 ID:??? (+21,-30,-223)
    所々で枝分かれするように変更してみますた。
    <!DOCTYPE html>
    <html><head><title>???</title>
    </head><body>
    <pre><script type="text/javascript">
    var idn = 0, obj = {idn: 0}, level = 0, alt = false, thr = 0.05;
    while(level < 1000) {
    if(!alt) {
    obj = {next: obj, idn: ++idn}; ++level; alt = Math.random() < thr;
    if(alt) { obj.alt = {idn: ++idn}; }
    } else {
    obj.alt = {next: obj.alt, idn: ++idn, branch: true}; alt = Math.random() > thr;
    }
    }
    var stack = []; stack.push(obj);
    while(stack.length > 0) {
    var e = stack.pop();
    for(var k in e) {
    if(e[k] instanceof Object) {
    document.writeln('prop ' + k + ': object'); stack.push(e[k]);
    } else {
    document.writeln('prop ' + k + ': ' + e[k]);
    }
    }
    }
    </script></pre>
    </body></html>
    874 : Name_Not - 2012/06/07(木) 12:55:52.00 ID:??? (+36,-30,-41)
    たとえばこういうテストデータを…

    for(var i = 1; i <= 1000; ++i) {
    var o = new Object(); o['a'+i] = i; o['b'+i] = obj; o['c'+i] = obj; obj = o;
    }

    …って、レベルを1000とかするとえらいことになるが。
    875 : Name_Not - 2012/06/07(木) 13:17:48.94 ID:??? (+62,+29,-11)
    >>874
    それじゃ階層構造(木)じゃなくてDAGじゃん。DAGや一般のグラフを
    たどるのだったら、それなりの手当てが必要だよね。大したことはないけど。
    876 : Name_Not - 2012/06/07(木) 13:29:36.41 ID:??? (+57,+29,-4)
    たらい回し関数を再帰呼び出ししまくるとわかる
    877 : Name_Not - 2012/06/07(木) 19:31:23.21 ID:Ue5itF0d (+30,+29,-2)
    >>873
    足がかりにして勉強します
    ありがとうございます
    878 : Name_Not - 2012/06/08(金) 13:16:47.51 ID:??? (-3,-30,-130)
    jQuery mobileで、ページ要素ごとに使いたいJSファイルが異なる場合、

     $('[data-role="page"]').live('pageshow', function(){
      $.getScript("/js/page-1.js"); // jQMのページ単位で固有のJSをロードする
     });

    みたいに、getScript使わないと無理ですかね?
    もっとスマートなやり方ってありますか?
    879 : Name_Not - 2012/06/08(金) 13:40:53.52 ID:??? (-18,-29,-32)
    【jQuery】JavaScript ライブラリ総合質問所 vol.1
    http://toro.2ch.net/test/read.cgi/hp/1327814124/
    880 : Name_Not - 2012/06/08(金) 14:39:33.50 ID:??? (+94,+28,-4)
    >>878
    そもそもその設計が変だろ
    881 : Name_Not - 2012/06/08(金) 14:43:37.44 ID:??? (+86,+22,-5)
    >>878
    各ページで全部読み込めばいいじゃんw
    グロ汚染するなら切り替えれ
    882 : 878 - 2012/06/08(金) 18:26:37.97 ID:??? (+67,+29,-6)
    >>879
    誘導ありがとうございます。

    >>880>>881
    たしかにそうですね。
    HTML単位で、必要なものをあらかじめ読み込むようにします。
    ありがとうございました。
    885 : Name_Not - 2012/06/09(土) 07:05:51.80 ID:??? (+7,-10,-2)
    ダサいコード
    886 : Name_Not - 2012/06/09(土) 09:26:15.04 ID:??? (-10,-29,-53)
    >>883-884
    いわゆるaddLoadEventだと思いますが、今ならaddEventListenerで充分なような。
    IE8-用ですかね。
    887 : Name_Not - 2012/06/09(土) 09:30:06.21 ID:??? (-29,-30,-57)
    現場の流行ではこう書く。覚えておくといいよ。

    window.onload = function() {
        alert("bar");
    };
    window.onerror = window.onload;
    window.onload = function() {
        alert("foo");
        null();
    };
    888 : Name_Not - 2012/06/09(土) 12:22:53.76 ID:??? (-2,-30,-36)
    今更window.onloadを使うん?
    addEventListener, attachEvent が普通だと思ってた
    889 : Name_Not - 2012/06/09(土) 12:24:43.00 ID:??? (+48,+25,-6)
    あれ?
    動かないよ
    試した?
    890 : Name_Not - 2012/06/09(土) 12:37:59.81 ID:??? (+0,-28,+0)
    いまさらも何も window.onload は普通に使うでしょ
    891 : Name_Not - 2012/06/09(土) 12:40:42.92 ID:??? (+24,+6,+0)
    動かない
    892 : Name_Not - 2012/06/09(土) 13:36:49.10 ID:??? (+46,+23,-4)
    実用のスクリプトには使ってない
    893 : Name_Not - 2012/06/09(土) 14:55:46.65 ID:??? (-1,-29,-16)
    window.onload は使う必要性がない
    894 : Name_Not - 2012/06/09(土) 15:02:55.55 ID:??? (+57,+29,-7)
    なんで?
    使い分ける必要ないから楽やん
    896 : Name_Not - 2012/06/09(土) 15:30:50.64 ID:??? (+34,-30,-183)
    var a=[ {x:1} ];

    var b=[], c=[];
    b[0]=a[0], c[0]=a[0];

    b[0].x++;
    c[0].x++;
    ~~~~~~~~~~~~~~~~~~~~~~~
    上記のコードを実行すると、b[0].xとc[0].xの中身が
    IE9とFirefox13だと2ですが、Chrome19.0.1084.52だと3になってしまいます。
    そもそも上記の b[0]=a[0] っていうのは代入ではないのですか?
    コピーされる側のa[0]の中身はプロパティ数が増減するため
    一つ一つb[0].x=a[0].xのように代入していく以外の方法で、安全に
    全プロパティをコピーする方法があったら教えて下さい。
    897 : Name_Not - 2012/06/09(土) 15:39:31.36 ID:??? (+3,-29,-63)
    896ですが、Chromeのバージョン確認したらアップデートがあって
    19.0.1084.56になったら上記のコードの結果が両方とも2になりました…。

    アップ前は確かに他ブラウザと同じコードで結果が3になっていた(参照渡しみたいに)のですが。
    上のコードは問題ないって事でいいのでしょうか?
    898 : Name_Not - 2012/06/09(土) 15:41:59.01 ID:??? (+57,+29,-25)
    何度もすいません、やっぱりChromeでは3のままでした。連レス申し訳ないです。
    コードの問題点があったら教えていただけるとありがたいです。
    899 : Name_Not - 2012/06/09(土) 15:46:14.21 ID:??? (-11,-29,-8)
    >>895
    別の人が同じ方法でonloadに設定したら実行されないわけだが
    900 : Name_Not - 2012/06/09(土) 15:47:57.17 ID:??? (+0,-28,-5)
    >>896
    IEでもFirefoxでも3になると思うんだけど?
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

    類似してるかもしれないスレッド


    トップメニューへ / →のくす牧場書庫について