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

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

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

601 = :

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

pythonだったらよかったのにね

603 = :

JSONで文字列比較がありなら>>601をそのまま実装してしまえばいいと思うけど

あまりにデータ数が多いならサーバに投げるのもありだけど、それならphpじゃ心許ないしなあ

604 = :

考えたんですが

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が一番小さいやつにするといいのか

607 = :

あっ、
ループの度に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 = :

あっ、オブジェクト?
オブジェクトだったらもっと効率的に出きるかも知れないから例書いといてくれ。

609 = :

質問です
document内のエレメントに、何か自分用の印とかメモとかを付けたい時、
element.hogehoge="are";
とか
if(element.hogehoge=="are"){~
みたいに勝手に予約語にないプロパティ?を作って書き込んだり読み出したりしていいんでしょうか?

610 = :

>>609
それは共同開発者に聞いてくれ
共同開発者がいないなら、本気でどうでもいい。好き放題やっていい
なんだったら独自要素作っても良い
<foo>独自要素です</foo>
SEO的にどう評価されるかは知らないけど

611 = :

>>610
ありがとうございます
聞きたかったのは言語仕様としてまず可能なのかどうか(全てのブラウザ環境で使えるのか)だったので、OKのようですね。
こういうことは意外にJavascriptの入門書に書いてない気がします。
ありがとうございます。

612 = :

単なるオブジェクトへのプロパティの設定だから書いてあるだろ。
domから見たらエレメントは特別だがjsから見たら単なるオブジェクトの一種なんだし

614 = :

>>612
すごく論理的に読んだらそうなんでしょうし、今なら私にも分かりますが、
>>609みたいに血の通った使い道の説明があったらもっと早く安心して飲み込めたなぁと思うので。

615 = :

>>611
何を設定しても良いのは間違いないが、
そういう時ようにdata属性ってのがある
data-fooなどはjQueryからも読みやすくて良い

617 = :

>>594
確か、はてなブログだったかな?

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

自動的に、広告ページへ飛ばされる

618 = :

DOM に独自のプロパティを、勝手に追加したら、
DOMの仕様に適さなくなるから、DOMじゃなくなる

独自部分は、カスタムデータ属性を使うべき

619 = :

>>597
>>617
593です。まだ試していませんがとても助かります。ありがとうございます。

620 = :

lodash にある

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

_.intersection(array...)

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

// → [1, 2]

621 = :

「Webブラウザで動かすJS」以外、
たとえばNode環境とかTypeScriptとかの話って、このスレの範囲内?
やっぱ板チ?

622 = :

>>621
スレあるよ。
活気はあんまりないけど

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

TypeScript
http://mevius.5ch.net/test/read.cgi/tech/1524746903/

623 = :

アリガサンキュー
あくまで例なだけでTSやnodeだけの話じゃないんだけどね

624 :

>>620
あざます

625 = 624 :

>>608
配列の要素になる(予定の)オブジェクトはよくあるクラスのインスタンスです
インスタンス群から、ある複数条件に&マッチするものを抽出するの>>598の目的です

あるひとつの条件にマッチするかどうかはインスタンス生成時に判明するので
条件ごとに、マッチするインスタンス群を配列化しておいて
実際に抽出する際には、選択された条件の配列群から
全てに含まれる要素だけを抜き出そうと考えてました

626 = :

文字列に応じた処理分岐ってどうするのが一番いいの
パッと思いついたのは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で、イベント絡みなので頻繁に呼ばれる可能性が高い
よろしくお願いします

629 = :

[].slice()を使った配列の複製って
2次元配列以降は値渡しできないんだなぁ…
シンプルに多次元配列を複製する方法教えてください

630 = :

>>626
> 文字列に応じた処理分岐ってどうするのが一番いいの

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

どうせ頻繁に呼ばれると言っても
1秒間に100回も呼ばれないだろ?
頻繁と言って良いのは10000回レベルからだぜ

631 = :

>>626
> if(obj.hasOwnProperty(str)){
これは不要

632 = :

>>629
const コピー先 = JSON.parse(JSON.stringify(コピー元))
関数入れたり等してない単なるデータならこれ使えんか?
さすがjavascript結構速いぞ

633 = :

MessagePort使って非同期にするほうがより良い

634 = :

Ruby でも、clone, dup など、基本は、shallow copy(浅いコピー)で、
deep copy(深いコピー)は、Marshal.dump

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

JavaScript では、lodashの、cloneDeep がある

635 = :

スレタイにRuby 禁止って入れるか。

636 = :

>>632
いいなサンクス!

>>634
lodashも検討します

637 = :

オブジェクトが要素の配列の複製ってやっぱ面倒なんやね
1人でずっとやってきたから俺がわかってないだけなのかと思ってた

複製が予想されるオブジェクトには
自分の複製インスタンスを返すメソッド持たせたりしてるんだけど
これは変なやり方?

638 = :

別に面倒ではない
ただの構造体なら>>632でいいし
インスタンスのコピーなら当然クラス側にcloneメソッドを付けるのが普通
DOMのように

639 = :

空ループ1億回するだけならどう言う書き方が最速なのか気になる

640 = :

ワンライナーで検索すれば色々でてくるよ

641 = :

内部の状態を変えないなら複製の必要もない
内部の状態を変えたくなったらインスタンスごと作り直せば元のインスタンスの中身は変わらない
そのためにはクラス定義をなるべく小さなものにすること
要はValueObjectよ

642 = :

tableを100個くらいまとめて作るには

for(n=1;n<=100;n++){
document.write("<table><tr><td>aaa</td></tr></table>");
}
のようにdocument.writeでやるしかないんですか?*

643 = :

>>642
普通それはphpで行う
それ以前にtable100個必要な理由はよーわからんが

644 = :

「サーバーサイドで行う」ならわかるがなぜphp限定

645 = :

>>644
通じるかどうかで迷ってん

646 = :

テーブル100個はいろいろと無駄
Canvasでやれ

647 = :

phpとjs使えるだけでプログラマー気取りのweb屋さん

648 = :

document.write使うなし
今のブラウザだとdocument.writeされるたびに全体が再描画されて極端に速度低下する場合があるので
素直にdocumentFragment作ってからappendChildするなり全部文字列で連結してからinnerHTMLに突っ込め


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

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


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