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

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

    JavaScript覧 / PC版 /
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter

    851 :

    >>850
    中味がオブジェクトか否かを見ながら再起

    852 = 851 :

    まちがえた
    再帰

    853 = 850 :

    すいません。わからないのでコード教えて下さい。
    再帰しすぎるとよくないという話も聞きましたが。。多分、実際のコードでは階層が
    千におよぶと思います。

    856 = :

    >>853
    >再帰しすぎるとよくない
    そんな、健康法みたいなw
    古い言語や機械だと、再帰でスタックを食い潰す事があったから、
    多分その事を言ってるんだと思う。
    今時の言語や機械なら、よほど深くならない限りは大丈夫。

    857 = :

    今時でも再帰しすぎはよくねーよアホ

    858 = 851 :

    「再帰いくない」「いや問題ない」って聞いて
    理由がわからないまま盲目的にどちらかを信じるのがよくねーですな

    自分は深くなるときは>>854のようにsetTimeoutで遅延させるんだけど
    もっと賢いやり方を教えて欲しい

    859 = :

    大きすぎるなら再帰なしで書くしかないでしょ。

    860 = :

    構造が固定なら決めうちでいい

    固定じゃないならセイウチ

    861 = :

    関数呼び出しで時間くうからウン万回と再帰するなら強引にループに直したほうがいいぜ

    863 = :

    >>861
    ああなるほど

    864 = :

    >>849
    いや、だからそれが発端でいろいろ整理された結果が現状なんだけど、またその発端の
    方がいいということ?

    865 = :

    今のでええよ

    866 = :

    >>850-861 1000レベルの再帰はどのみち動かないでしょ。
    >>861-862 文字列にしたら構造が取れなくなるし、1000レベルあるってことは何MBもの文字列?
    スタックを使って再帰をループに変換とか定石だと思うんだけど、なぜか
    スタックに言及する人が誰もいないという。

    867 = :

    とりあえず、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 = :

    テストデータとして、枝は2本以上ある方がいいのでは。

    870 = :

    >>868-869 ぜひとも改良版の投稿を期待しますよ。

    871 = :

    投稿しても無視だしもういいよ。勝手にやってろよ

    873 = :

    所々で枝分かれするように変更してみますた。
    <!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 = :

    たとえばこういうテストデータを…

    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 = :

    >>874
    それじゃ階層構造(木)じゃなくてDAGじゃん。DAGや一般のグラフを
    たどるのだったら、それなりの手当てが必要だよね。大したことはないけど。

    876 = :

    たらい回し関数を再帰呼び出ししまくるとわかる

    877 = 851 :

    >>873
    足がかりにして勉強します
    ありがとうございます

    880 = :

    >>878
    そもそもその設計が変だろ

    881 = :

    >>878
    各ページで全部読み込めばいいじゃんw
    グロ汚染するなら切り替えれ

    882 = :

    >>879
    誘導ありがとうございます。

    >>880>>881
    たしかにそうですね。
    HTML単位で、必要なものをあらかじめ読み込むようにします。
    ありがとうございました。

    885 = :

    ダサいコード

    889 = :

    あれ?
    動かないよ
    試した?

    890 = :

    いまさらも何も window.onload は普通に使うでしょ

    891 = :

    動かない

    892 = :

    実用のスクリプトには使ってない

    894 = :

    なんで?
    使い分ける必要ないから楽やん

    896 = :

    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 = :

    896ですが、Chromeのバージョン確認したらアップデートがあって
    19.0.1084.56になったら上記のコードの結果が両方とも2になりました…。

    アップ前は確かに他ブラウザと同じコードで結果が3になっていた(参照渡しみたいに)のですが。
    上のコードは問題ないって事でいいのでしょうか?

    898 = :

    何度もすいません、やっぱりChromeでは3のままでした。連レス申し訳ないです。
    コードの問題点があったら教えていただけるとありがたいです。

    900 = :

    >>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一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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