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

    私的良スレ書庫

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

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

    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
    601 : Name_Not - 2019/02/07(木) 14:42:16.46 ID:???.net (+27,-30,-114)
    >>598
    気になったので調べてみた。組み込みには無いね
    http://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Set

    function intersection(setA, setB) {
    var _intersection = new Set();
    for (var elem of setB) {
    if (setA.has(elem)) {
    _intersection.add(elem);
    }
    }
    return _intersection;
    }

    //Examples
    var setA = new Set([0,1,3,5,8,11,15,23,30]),
    setB = new Set([2,3,4,8,9,16,17,20,21,23,25,28]),
    setC = new Set([3,6,8,13,16,19,23,27,32]);

    intersection(intersection(setA, setC),setB); //3,8,23
    602 : Name_Not - 2019/02/07(木) 14:48:15.27 ID:???.net (+51,+28,-1)
    pythonだったらよかったのにね
    603 : Name_Not - 2019/02/07(木) 14:58:21.82 ID:???.net (+61,+29,-74)
    JSONで文字列比較がありなら>>601をそのまま実装してしまえばいいと思うけど

    あまりにデータ数が多いならサーバに投げるのもありだけど、それならphpじゃ心許ないしなあ
    604 : Name_Not - 2019/02/07(木) 15:07:26.82 ID:???.net (+1,-30,-153)
    考えたんですが

    n個の配列の1個目のコピーを用意
    tmp[0,1,3,5,8,11,15,23,30]

    tmpをループで後ろから
    2個目.indexOf(30) == -1 なら tmp末尾削除
    2個目.indexOf(23) == -1 なら tmp末尾削除
    2個目.indexOf(15) == -1 なら tmp末尾削除

    ってのを、3個目、4個目、... n個目と繰り返せば
    ループ回数はどんどん減ってくことになるから
    総ループ数は最短で済む、のかな?

    あ、最初に用意するコピーは1個目じゃなく
    lengthが一番小さいやつにするといいのか
    605 : 597 - 2019/02/07(木) 15:08:18.18 ID:wXUnJGMV.net (-21,+29,-9)
    今気づきましたがメ欄に番号書いてました…
    >>598
    >>600
    >>604
    は私です…
    606 : Name_Not - 2019/02/07(木) 15:54:02.84 ID:???.net (-5,-30,-218)
    >>598
    const intersection = (...arrays) => {
    const truthArrays = arrays.map(array => array.reduce((acc, n) => (acc[n] = true, acc), []))
    const result = []
    for (let i = 0; i <= Math.max(...arrays.flat()); i++) {
    if (truthArrays.map(truthArray => truthArray[i]).every(v => v)) result.push(i)
    }
    return result
    }

    const a = [0,1,3,5,8,11,15,23,30]
    const b = [2,3,4,8,9,16,17,20,21,23,25,28]
    const c = [3,6,8,13,16,19,23,27,32]

    intersection(a, b, c)
    //=> [3, 8, 23]
    607 : Name_Not - 2019/02/07(木) 16:08:19.79 ID:???.net (+3,-30,-64)
    あっ、
    ループの度にMath.max(...arrays.flat())が評価されちゃうから↓の行は、
    for (let i = 0; i <= Math.max(...arrays.flat()); i++) {
    ↓の二行に分けたほうがよかったゴメン
    const maxNum = Math.max(...arrays.flat())
    for (let i = 0; i <= maxNum; i++) {
    608 : Name_Not - 2019/02/07(木) 16:23:35.64 ID:???.net (+79,+29,-36)
    あっ、オブジェクト?
    オブジェクトだったらもっと効率的に出きるかも知れないから例書いといてくれ。
    609 : Name_Not - 2019/02/07(木) 18:20:03.24 ID:???.net (+73,-30,-55)
    質問です
    document内のエレメントに、何か自分用の印とかメモとかを付けたい時、
    element.hogehoge="are";
    とか
    if(element.hogehoge=="are"){~
    みたいに勝手に予約語にないプロパティ?を作って書き込んだり読み出したりしていいんでしょうか?
    610 : Name_Not - 2019/02/07(木) 18:25:36.10 ID:???.net (+96,+28,-17)
    >>609
    それは共同開発者に聞いてくれ
    共同開発者がいないなら、本気でどうでもいい。好き放題やっていい
    なんだったら独自要素作っても良い
    <foo>独自要素です</foo>
    SEO的にどう評価されるかは知らないけど
    611 : Name_Not - 2019/02/07(木) 18:27:35.54 ID:???.net (+80,+29,-49)
    >>610
    ありがとうございます
    聞きたかったのは言語仕様としてまず可能なのかどうか(全てのブラウザ環境で使えるのか)だったので、OKのようですね。
    こういうことは意外にJavascriptの入門書に書いてない気がします。
    ありがとうございます。
    612 : Name_Not - 2019/02/07(木) 18:32:17.59 ID:???.net (+91,+29,-106)
    単なるオブジェクトへのプロパティの設定だから書いてあるだろ。
    domから見たらエレメントは特別だがjsから見たら単なるオブジェクトの一種なんだし
    613 : Name_Not - 2019/02/07(木) 18:37:04.35 ID:???.net (-1,-29,-16)
    >>604
    自力で実装するにしても最悪O(n^m)はさすがにキツいかなあ
    614 : Name_Not - 2019/02/07(木) 18:37:39.99 ID:???.net (+71,+30,-38)
    >>612
    すごく論理的に読んだらそうなんでしょうし、今なら私にも分かりますが、
    >>609みたいに血の通った使い道の説明があったらもっと早く安心して飲み込めたなぁと思うので。
    615 : Name_Not - 2019/02/07(木) 18:58:04.52 ID:???.net (+9,-29,-35)
    >>611
    何を設定しても良いのは間違いないが、
    そういう時ようにdata属性ってのがある
    data-fooなどはjQueryからも読みやすくて良い
    616 : Name_Not - 2019/02/07(木) 18:59:03.31 ID:???.net (+0,-28,+2)
    617 : Name_Not - 2019/02/08(金) 00:35:32.42 ID:???.net (+107,+29,-33)
    >>594
    確か、はてなブログだったかな?

    質の悪い広告を採用している。
    システムセキュリティーの、広告か何かだったかな?

    自動的に、広告ページへ飛ばされる
    618 : Name_Not - 2019/02/08(金) 00:45:41.89 ID:???.net (+3,-24,-70)
    DOM に独自のプロパティを、勝手に追加したら、
    DOMの仕様に適さなくなるから、DOMじゃなくなる

    独自部分は、カスタムデータ属性を使うべき
    619 : Name_Not - 2019/02/08(金) 00:47:36.62 ID:???.net (+69,+28,-2)
    >>597
    >>617
    593です。まだ試していませんがとても助かります。ありがとうございます。
    620 : Name_Not - 2019/02/08(金) 00:50:04.25 ID:???.net (+15,-30,-53)
    lodash にある

    複数の配列の積集合(共通する値)を取得する

    _.intersection(array...)

    _.intersection([1, 2, 3], [5, 2, 1, 4], [2, 1]);

    // → [1, 2]
    621 : Name_Not - 2019/02/08(金) 15:01:57.14 ID:???.net (+4,-29,-19)
    「Webブラウザで動かすJS」以外、
    たとえばNode環境とかTypeScriptとかの話って、このスレの範囲内?
    やっぱ板チ?
    622 : Name_Not - 2019/02/08(金) 15:13:11.87 ID:???.net (+3,-29,+0)
    >>621
    スレあるよ。
    活気はあんまりないけど

    nodejs
    http://mevius.5ch.net/test/read.cgi/tech/1518528093/

    TypeScript
    http://mevius.5ch.net/test/read.cgi/tech/1524746903/
    623 : Name_Not - 2019/02/08(金) 17:47:57.51 ID:???.net (+57,+29,-21)
    アリガサンキュー
    あくまで例なだけでTSやnodeだけの話じゃないんだけどね
    624 : 597 - 2019/02/08(金) 18:09:20.34 ID:4ZYoc13A.net (+16,+21,+0)
    >>620
    あざます
    625 : 597 - 2019/02/08(金) 18:20:03.62 ID:4ZYoc13A.net (+35,+29,-125)
    >>608
    配列の要素になる(予定の)オブジェクトはよくあるクラスのインスタンスです
    インスタンス群から、ある複数条件に&マッチするものを抽出するの>>598の目的です

    あるひとつの条件にマッチするかどうかはインスタンス生成時に判明するので
    条件ごとに、マッチするインスタンス群を配列化しておいて
    実際に抽出する際には、選択された条件の配列群から
    全てに含まれる要素だけを抜き出そうと考えてました
    626 : Name_Not - 2019/02/08(金) 20:54:04.14 ID:???.net (+47,-30,-229)
    文字列に応じた処理分岐ってどうするのが一番いいの
    パッと思いついたのは3案
    案1 素直にif文
    if(str === 'hoge') {
    hogeFunc();
    } else if(str === 'piyo') {
    piyoFunc();
    } else {
    otherFunc();
    }
    案2 switch文
    switch(str) {
    case 'hoge': hogeFunc();
    break;
    case 'piyo': puyoFunc();
    break;
    default: otherFunc();
    }
    案3 連想配列
    const obj = {
    'hoge': hogeFunc,
    'piyo': piyoFunc,
    };
    if(obj.hasOwnProperty(str)){
    obj[str]();
    } else {
    otherFunc();
    }

    分岐数は大体20~30で、イベント絡みなので頻繁に呼ばれる可能性が高い
    よろしくお願いします
    627 : Name_Not - 2019/02/08(金) 21:08:55.68 ID:???.net (+0,-24,-2)
    >>626
    計測してみたら
    628 : Name_Not - 2019/02/08(金) 22:34:19.27 ID:???.net (-6,-29,-1)
    つ jsperf
    629 : Name_Not - 2019/02/08(金) 22:37:05.10 ID:???.net (+2,-29,-64)
    [].slice()を使った配列の複製って
    2次元配列以降は値渡しできないんだなぁ…
    シンプルに多次元配列を複製する方法教えてください
    630 : Name_Not - 2019/02/08(金) 22:37:56.16 ID:???.net (+68,+29,-31)
    >>626
    > 文字列に応じた処理分岐ってどうするのが一番いいの

    まず速度は無視して一番コードが少なく可読性が高い方法で書く
    9割以上はココまでで終わり

    どうせ頻繁に呼ばれると言っても
    1秒間に100回も呼ばれないだろ?
    頻繁と言って良いのは10000回レベルからだぜ
    631 : Name_Not - 2019/02/08(金) 22:40:43.39 ID:???.net (+4,-29,-8)
    >>626
    > if(obj.hasOwnProperty(str)){
    これは不要
    632 : Name_Not - 2019/02/08(金) 23:06:56.39 ID:???.net (+38,-30,-87)
    >>629
    const コピー先 = JSON.parse(JSON.stringify(コピー元))
    関数入れたり等してない単なるデータならこれ使えんか?
    さすがjavascript結構速いぞ
    633 : Name_Not - 2019/02/08(金) 23:17:21.51 ID:???.net (+18,-29,-7)
    MessagePort使って非同期にするほうがより良い
    634 : Name_Not - 2019/02/08(金) 23:55:54.41 ID:???.net (+9,-30,-88)
    Ruby でも、clone, dup など、基本は、shallow copy(浅いコピー)で、
    deep copy(深いコピー)は、Marshal.dump

    Marshal.dumpは「オブジェクト ←→ 文字列」の変換だから、
    文字列からインスタンスを作った際に、全く新しいインスタンスが作られる

    JavaScript では、lodashの、cloneDeep がある
    635 : Name_Not - 2019/02/09(土) 00:15:30.42 ID:???.net (+109,+22,-2)
    スレタイにRuby 禁止って入れるか。
    636 : Name_Not - 2019/02/09(土) 00:38:17.60 ID:???.net (+3,-25,-15)
    >>632
    いいなサンクス!

    >>634
    lodashも検討します
    637 : Name_Not - 2019/02/09(土) 00:39:14.27 ID:???.net (+69,+29,-81)
    オブジェクトが要素の配列の複製ってやっぱ面倒なんやね
    1人でずっとやってきたから俺がわかってないだけなのかと思ってた

    複製が予想されるオブジェクトには
    自分の複製インスタンスを返すメソッド持たせたりしてるんだけど
    これは変なやり方?
    638 : Name_Not - 2019/02/09(土) 11:36:30.68 ID:???.net (+63,+29,-52)
    別に面倒ではない
    ただの構造体なら>>632でいいし
    インスタンスのコピーなら当然クラス側にcloneメソッドを付けるのが普通
    DOMのように
    639 : Name_Not - 2019/02/09(土) 12:20:40.87 ID:???.net (+91,+29,-8)
    空ループ1億回するだけならどう言う書き方が最速なのか気になる
    640 : Name_Not - 2019/02/09(土) 12:33:13.61 ID:???.net (+57,+29,-3)
    ワンライナーで検索すれば色々でてくるよ
    641 : Name_Not - 2019/02/09(土) 12:55:51.58 ID:???.net (+62,+29,-52)
    内部の状態を変えないなら複製の必要もない
    内部の状態を変えたくなったらインスタンスごと作り直せば元のインスタンスの中身は変わらない
    そのためにはクラス定義をなるべく小さなものにすること
    要はValueObjectよ
    642 : Name_Not - 2019/02/09(土) 13:01:14.29 ID:???.net (+34,-30,-48)
    tableを100個くらいまとめて作るには

    for(n=1;n<=100;n++){
    document.write("<table><tr><td>aaa</td></tr></table>");
    }
    のようにdocument.writeでやるしかないんですか?*
    643 : Name_Not - 2019/02/09(土) 13:02:50.20 ID:???.net (+48,+17,-7)
    >>642
    普通それはphpで行う
    それ以前にtable100個必要な理由はよーわからんが
    644 : Name_Not - 2019/02/09(土) 13:06:40.54 ID:???.net (+91,+29,-8)
    「サーバーサイドで行う」ならわかるがなぜphp限定
    645 : Name_Not - 2019/02/09(土) 13:09:56.56 ID:???.net (+69,+29,-16)
    >>644
    通じるかどうかで迷ってん
    646 : Name_Not - 2019/02/09(土) 13:20:42.97 ID:???.net (+23,-4,-29)
    テーブル100個はいろいろと無駄
    Canvasでやれ
    647 : Name_Not - 2019/02/09(土) 13:50:10.07 ID:???.net (+6,-21,-10)
    phpとjs使えるだけでプログラマー気取りのweb屋さん
    648 : Name_Not - 2019/02/09(土) 14:00:33.40 ID:???.net (+7,-30,-80)
    document.write使うなし
    今のブラウザだとdocument.writeされるたびに全体が再描画されて極端に速度低下する場合があるので
    素直にdocumentFragment作ってからappendChildするなり全部文字列で連結してからinnerHTMLに突っ込め
    649 : Name_Not - 2019/02/09(土) 14:29:24.59 ID:???.net (-1,-29,-40)
    怖いhttps://twitter.com/chordbug/status/1092824833816170496
    (deleted an unsolicited ad)
    650 : Name_Not - 2019/02/09(土) 14:42:27.40 ID:???.net (-1,-29,-15)
    >>648
    文字列結合してから最後に一回だけdocument.writeすればいいだけ
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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