のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,646,724人
昨日: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,-154)
考えたんですが

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,-54)
質問です
document内のエレメントに、何か自分用の印とかメモとかを付けたい時、
element.hogehoge="are";
とか
if(element.hogehoge=="are"){~
みたいに勝手に予約語にないプロパティ?を作って書き込んだり読み出したりしていいんでしょうか?
610 : Name_Not - 2019/02/07(木) 18:25:36.10 ID:???.net (+95,+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,-107)
単なるオブジェクトへのプロパティの設定だから書いてあるだろ。
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 (+4,-23,-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,+0)
文字列に応じた処理分岐ってどうするのが一番いいの
パッと思いついたのは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 (+110,+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 (+33,-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 (+47,+16,-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 (+24,-3,-29)
テーブル100個はいろいろと無駄
Canvasでやれ
647 : Name_Not - 2019/02/09(土) 13:50:10.07 ID:???.net (+7,-20,-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 スレッド一覧へ
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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