+ JavaScript の質問用スレッド vol.141 +
レス数が1000を超えています。これ以上書き込みはできません。
JavaScript を自ら学ぶ人のための質問スレッドです。
次スレは>>950が(本スレで改善案があれば考慮して)立ててください
■規則/推奨ルール
質問者は !slip:vvvvv を名前欄に、その後は「レス番」+!slip:vvvvv
・質問内容は具体的に。言葉だけでなく、出来る限り再現性を確認したサンプルコードの掲示。
・質問テンプレートの利用推奨。
・質問への「答え」から解離した議論はよそでやること。
■禁止行為
・丸投げ質問
・迷惑スクリプトの質問
・オレオレ用語の使用(一般的な用語を使用する事)
・煽り、批判等の他人を不快にさせる行為
■質問テンプレート
【環境】OS, ブラウザをバージョンと共に記入してください。
【条件】期待する回答の条件を書いてください。
【何をしたのか】何をしたら問題の現象が発生するのか。再現手順を具体的に書いてください。
【エラーメッセージ】エラーメッセージがあれば正確に書き写してください。
【期待する結果】最終的にどういう結果を望んでいるのか、を書いてください。
【サンプルコード】現象を再現可能な最小限のコードを書いてください。
1レスに収まらないならコード投稿サイトを利用してください。
http://jsdo.it/ http://jsbin.com/ http://jsfiddle.net/ http://ideone.com/
■回答者へ
・回答には多様性があります。他人の回答を尊重してください
・動作ブラウザや環境が限られる場合は、それを明記してください
・他人の回答を批判する代わりに、自分ならこう書くという例を示してください
・質問者がJavaScriptでなければ実現できないと勘違いしてるなら、その否定としてHTMLとCSSで実装しても良い
・他人の回答を見たくないのであれば、文句をつける代わりにNGにして見えないようにしてください。文句をつける=荒らしです
■前スレ
+ JavaScript の質問用スレッド vol.140 +
https://mevius.5ch.net/test/read.cgi/hp/1558249632/ 2 名前:Name_Not_Found[] 投稿日:2019/05/19(日) 16:08:41.33 ID:2J4OYdDV
■FAQ
◆開発者ツール(Developer Tools)の基本的な使い方
▼諸注意
- 本説明では Google Chrome の開発者ツールの名称に従います。他ブラウザで使う場合は適宜読み替えて下さい。
- Edge- でコンソールを使うには予め開発者ツールを起動しておく必要があります(開発者ツールを起動しないと console.log() が機能しません)
- Safari はデフォルトで開発者ツールが無効な為、有効に設定する必要があります。
https://developer.apple.com/library/safari/documentation/AppleApplications/Conceptual/Safari_Developer_Guide/GettingStarted/GettingStarted.html
▼要素を検証
1. ページ上で右クリックして [要素を検証]
2. [Elements] パネルが開き、対象のDOMノードが選択される(選択対象が目的の要素でなければ [Elements] パネル上で選択し直す)
3. 右側のサイドバーから知りたいステータス名のタブを選択する
- [Styles] タブ … CSSプロパティの指定値を表示 (※カスケードによって上書きされたプロパティは取り消し線で表示される)
- [Computed] タブ … CSSプロパティの算出値を表示("font-size: 1em" を指定していても算出後の "*px" で表示される)
- [Properties] タブ … 選択したDOMノードのプロパティを表示
▼コンソール
1. JavaScript コード上で console.log('Hello, World!'); と入力
2. [Ctrl] + [Shift] + [I] キー(IE は [F12])で開発者ツールを開き、[Console] パネルを開く
3. [Console] パネルに "Hello, World!" と表示される
(※window.alert() は String 型に変換されますが、console.log() は Object 型の中身をそのまま表示してくれます。) ■FAQ(続き)
◆JavaScriptの実行速度
JavaScriptの速度は「ブラウザ名」「ブラウザのバージョン」「PCスペック」に依存します(ブラウザのバージョン毎に最適化具合が異なります)。
速度の疑問解消の為に http://jsperf.com/ (githubのアカウントが必要です)にコードをUPしてブラウザ毎に速度計測する事を推奨します。
例外として、仕様における理論上の速度が明確になっている場合があります。
例えば、正規表現によるマッチング処理を考えた場合、「RegExp#test > RegExp#exec > String#match」は ES5 仕様で保証(要出典)されています。
ES5 仕様において RegExp#test が最も処理数が少なく、String#match が最も処理数が多いことが明確だからです。
ブラウザによっては RegExp#test の最適化が十分でなく、String#match の最適化が RegExp#test より十分であれば逆転する可能性はありますが、各メソッドの最適化が一律であればこの前提が崩れる事はありません。
■各種仕様
◆ Standard ECMA-262
http://bclary.com/2004/11/07/ (ECMAScript 3 HTML版)
http://www2u.biglobe.ne.jp/~oz-07ams/2002/ecma262r3/ (ECMAScript 3 和訳)
http://www.ecma-international.org/ecma-262/5.1/ (ECMAScript 5.1 HTML版)
http://tsofthome.appspot.com/ecmascript.html (ECMAScript 5.1 和訳)
http://www.ecma-international.org/ecma-262/6.0/ (ECMAScript 6 / ECMAScript 2015)
http://kangax.github.io/compat-table/es5/ (ECMAScript 5 compatibility table)
http://kangax.github.io/compat-table/es6/ (ECMAScript 6 compatibility table)
◆ HTML Standard (HTML5)
http://www.whatwg.org/specs/web-apps/current-work/multipage/
http://momdo.s35.xrea.com/web-html-test/spec/WD-html51-20130528/Overview.html (HTML5.1 部分訳)
http://www.hcn.zaq.ne.jp/___/WEB/WebStorage-ja.html (Web Storage 和訳) Q. jQueryはどのバージョンを使えばいいのですか?
A. IE9以上であれば、jQuery 3.0を使用してください。
IE8以下にも対応するならば、jQuery 1.12を使用してください。
補足
jQuery 1.9 までは一系統しかなく、古いブラウザも含めて全て対応していました。
その後、古いブラウザを切り捨てるためにバージョンを分岐させました。
古いブラウザにも対応した1系(1.10、1.11、12)と
古いブラウザを切り捨てた2系(2.0, 2.1, 2.2)です。
1系と2系は対応ブラウザの違いだけで機能は全く一緒です。
機能が同じなのにメジャーバージョンが違っているのが分かりにくい
ということでバージョン番号の付け方を変えることになり、
新たに古いブラウザを切り捨てたjQuery 3.0、そして古いブラウザにも対応した
jQuery Compat 3.0がリリースされる予定でした。
しかしマイクロソフトが古いIEのサポートポリシーを変更し
サポート中であるOSで動く、最新のIEしかサポートしなくなったために、
2016年1月でVista上のIE8のサポートが終了しました。
そのため予定されていたjQuery Compat 3.0がなくなり、
jQueryは3.0に一本化されました。 ■質問を書く上で
(1) 煽り、コード制作依頼等、人を不快にさせる投稿はご遠慮下さい。公序良俗を守った応対を心がけてください。
(2) 他の人に迷惑をかけるスクリプトの質問はご遠慮ください。
(ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など)
(3) 質問者及び議論を行う人はメール欄を空欄にし、名前にレス番を入れることを強く推奨します。回答者はなりすましを判断できませんので、なりすましが現れても自己責任となります。
(4) 常に自発的に調べる心構えを持ってください。
具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。
わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。
(5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。
(6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。
※必ず「問題の事象が再現されること」を確認してください。
必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。
(7) サンプルコードに HTML が含まれる場合は http://validator.w3.org/ で [Check] してみてください。
(8) 質問を具体的かつ詳細に書くと回答を得られやすいです。>>2の質問テンプレートを活用してみてください。
(9) 時にはあなたが望む「答え」だけでなく、「意見」などが寄せられる場合もあります。 ■JavaScript主要ライブラリ・フレームワーク 利用率
https://w3techs.com/technologies/overview/javascript_library/all
ライブラリ固有の質問はこちらへ
JavaScript ライブラリ総合質問所 vol.5
https://mevius.5ch.net/test/read.cgi/hp/1465399470/
>>1 私見
べつに lodash だけを特別視する訳ではありませんが、vanilla JS だと長くなるコードが
lodash ならサクっと書けるコードがあったりします。
「別解として lodash の短いコードを出す」くらいはココでも良いような気がします(あくまで私見) 流石に何十スレも言われ続けてるんだから
何らかの形でちょっとずつでいいからテンプレ直していこうよ
理由があればなんで勝手に>>1変えたんだとか言わないからさ
そのままっていうのは良くない
とりあえずまず>>2以降をバッサリ変えよう
ドキュメントのリンクもMDNとES仕様のLS版以外いらないでしょ 何らかの形でちょっとずつでいいからテンプレ直していこうよ
↓
とりあえずまず>>2以降をバッサリ変えよう >>12
>>1に比べて>>2以降はスレ落ちを防ぐための何人が目にしてるかわからないような低価値テンプレでしょ
>>1を変えるのは慎重にならないといけないし、とりあえず手を付けなくてもいいけど
>>2以降の列挙されているのを整理することは「ちょっと」でしょ >>9
> ライブラリ固有の質問はこちらへ
>>5-7でライブラリ関連のテンプレを入れている矛盾を何とかしてくれ >>14
あっちにライブラリのテンプレが入ってないから
やむをえないでしょう
「そもそもあっちとは遥かに勢いが違う」というのも否めない
それだけ「ライブラリ固有の質問に需要がない」といえるのかも知れない
ただ lodash だと短く書けるという話はチラホラ出てるから
こっちで敢えて lodash 全面禁止する必要性があるかどうか…? >>4 は多分誰も読んでないから全て削除で良いかと
即死判定は事実上ないから 読んでいる人が殆ど居ないかも知れないが
>>8 は 2 へ繰り上げる方が良いかも 現時点での >>2 の必要性は、私には分からん
要らんという意見が多数を占めるなら、以後削ることになろうかと >>3 の前半も、
「要らん」という意見が多数を占めるなら(以下同文 整理すると
>>2 要らんのと違う?
>>3 前半は要らんのと違う?
後半は >>16
>>4 要らんのと違う?
>>5-7 維持すべきだとおもう
>>8 は2へ繰り上げるべきだとおもう くだらないことをしてるから、いつもどおり参戦したいんだが、
今、個人プロジェクトが架橋に入ってるので、
残念ながら放置。また次回のスレ立て頃に遊びに来るよ >>1 >>8 >>16 の3スレでいい
ちなみに今リンクするならES9.0ではなく10.0ね >>15
> あっちにライブラリのテンプレが入ってないから
なら、あっちのテンプレ整備すればいい >>15で「需要がない」と言っておきながら、
> それだけ「ライブラリ固有の質問に需要がない」といえるのかも知れない
>>22でライブラリ関連のテンプレだけ残そうとする理由は何?
一貫性がなくて、結論だけ読むと、ライブラリ房に見える 現状、ライブラリは自己主張の激しい人が大半なわけで、>>1の趣旨に反する以上は専用スレでいいと思うけど
lodashがいいならシェア1位のjQueryもいいだろ、とか屁理屈こねる人が必ず出てくる >>1
> 質問者は !slip:vvvvv を名前欄に、その後は「レス番」+!slip:vvvvv
前スレでは「回答者だけ」だったルールが「質問者だけ」に改変した意図を詳しく
https://mevius.5ch.net/test/read.cgi/hp/1558249632/22
公平性を期すなら「両方」に課すべきルールだと思う
まあ、「任意ルールは守られない強制すべき」という結論が前スレで出ているわけだが、性善説でルールを決めたのなら公平にすべき 強制じゃないと効果なしと前スレで散々言われたのに、なぜ強制でなく、しかも質問者に絞ったのか? 仕様関連で最低限残すべきは、ES2019, HTML Standard, DOM関連ぐらいで、それ以外はFAQのリンク集に追加するぐらいでいい
http://fiddle.jshell.net/vSqKr/44/show/light/
Conpatibilityはcaniuseあたりが妥当か
ライブラリは向こうでやって + JavaScript の質問用スレッド vol.140 +
https://mevius.5ch.net/test/read.cgi/hp/1558249632/22
22 名前:Name_Not_Found (ワッチョイ 938f-h/tS)[] 投稿日:2019/05/23(木) 08:49:53.51 ID:t2rWukz00
前スレから。
このスレは age 進行でお願いします。
質問者は !slip:vvvvv を名前欄に、その後は「レス番」+!slip:vvvvv
回答者は !slip:vvvvv を名前欄に
質問者のかたは
1!slip:vvvvv
みたいなかんじで、よろしくお願いいたします。 >>28
jQuery / lodash ともに全面禁止にするべきなの? 主要ライブラリ列挙は要らんな
それがどんなライブラリなのかの文章がないと紹介にならないし >>33
全面禁止じゃないけど
サポートする範囲としてはES仕様と、Web標準だけというのを明記したほうがいい
特定のライブラリの機能の質問はライブラリスレですること
このライブラリを使わないといけないんですとかいうのは金払って依頼しなさいということになる
あとはパフォーマンスやらブラウザ固有の機能や実装問題も対象外 サポートとか良く分からんし、ココは無償サポートの場でもなし
ブラウザの機能や実装の話が対象外って意味分からん >>39
そこは俺も分からなかった
標準仕様の話だけをしたい(実装の話はしたくない)意図は読み取れるが、それは>>36の好みだろと思った 実際に動くかどうかは二の次ってこと
つまり○○したいんですがどうすれば良いんですか?
Web標準の仕様にはあります。
(まだ実装されてません)
動くかどうかは話をしたくない もうそれならタイトルを変えたほうが良いんじゃねーの?
「JavaScriptとウェブ標準の仕様について語るスレ」にしたほうが良いでしょ
当初のスレの意味と違う話をしたいなら >>41
それはお前が回答する度に前提条件を前置きすればいいんじゃないか?
全体ルールにする意義が分からん >>39,40
WebはWebであってブラウザのためのものではないから
Web標準もブラウザのためだけのものではない
ブラウザはWebのためにあっても、Webがブラウザのためにあるわけではない
Webの仕様から離れて実際ブラウザがどう動くかという話はブラウザスレでやってもらわないと
パフォーマンスの話も、基本的にそれはブラウザという1アプリの話なんだからスレチ
そもそもここはJS単体の質問スレ
だけどこのスレは今Web制作板にあるので外様APIはWeb APIを中心に話すべきということになる
ブラウザの話までは含まれない >>44
ここは「Web制作のJavaScriptスレ」であって「JavaScript仕様スレ」ではないぞ?
仕様の話に限定したいなら、仕様スレでやれ
第一、仕様を理解している人だけが質問対象者なら、今までの質問者は99%アウトだ
質問スレでそんな運用が可能とは思えん これは俺の好みについて言ってるんじゃないよ
テンプレ議論からのこのスレのポリシーについて話してる
Webというものがブラウザのためだけのものでなくなって久しいんだから
基本ポリシーとしてブラウザの話も受け入れるのならば
ブラウザ以外のWeb技術を導入しているプラットフォームの話題も受け入れないとおかしいことになる
俺はそれが実質無理だろうと思ったから、ブラウザも含めてプラットフォームの話は無しにしたほうがいいと言ってるのであって
もしなんでも受け入れてもいいよというのであれば、賛成する
だけどブラウザの話は受け入れるのに、ブラウザよりもスレが盛り上がっていない、
下手したら存在しない他のプラットフォームの質問を専用スレでやれと蹴り出すのはだめだと言っている
俺の好みの話をするならば、立派な外部スレが有るブラウザの話も受け入れるのであれば、
矮小な他プラットフォームは尚更ここで吸収してあげないといけないだろうということ >>45
仕様を理解だとかそういうことは一言も言っていない
Webというものはブラウザのためのものでなくなってから久しい
あとの言いたいことは>>46を読んでくれ Web制作板なんだから、「Web制作上、必要なJavaScript実装」は許容するに決まってるだろ
実装全体を禁止する理由がない > 基本ポリシーとしてブラウザの話も受け入れるのならば
> ブラウザ以外のWeb技術を導入しているプラットフォームの話題も受け入れないとおかしいことになる
意味が分からん
JavaScriptなら受け入れるし、そうでないなら受け入れないんじゃないのか? >>48
そうやって「実装」必要と抽象的に言えれば勿論そうだが
実際は抽象的な実装というのではなく具体的な話になってくるでしょう?
例えばAとBどちらが高速かという話になったら
質問者がしていていなかった場合であっても話の50%はChromeの実装が今現時点でどうなっているかになるでしょう?
ただこの手の話は仕様ベースであっても>>3のように時が立つと無効になるのだから
パフォーマンスの話というのは大変慎重にしないといけない >>46
> 俺はそれが実質無理だろうと思ったから、ブラウザも含めてプラットフォームの話は無しにしたほうがいいと言ってるのであって
「無理な理由」が秘密主義で説得力皆無なんだけど
「Web技術を導入しているプラットフォーム」も曖昧だし >>51
俺は100スレ以上前からいるが
過去ここで古くはWinメトロの話題からNode上でのStreamの話題や
様々なプラットフォームの質問が足蹴にされてきたのを見てきたから
ここはJSのスレでありJSというのはスクリプト言語であり様々なプラットフォーム上で動く
そしてWebというものも今やそれ自体もプラットフォームであり様々なプラットフォーム上で動く
俺はそういうのを大事にしたいと思ってるが、
実際のところIEやChromeなど特定のプラットフォームがどうこうの話ばかり
勿論著名実装がサポートしているかどうかの話くらいなら何も問題ないと思ってるが
それ以上に各実装の性質の踏み込む話、
そういう限定されたテーマというのはJSを「自ら学ぶ」ためというよりも
限定されればされるほど、今動けばいい「制作依頼」に近くなると思っているので
できるだけ普遍的なスレにしたいとは思ってる >>52
「俺がやりたいスレ」の話はおなか一杯だから、「実質無理」に触れてくれない?
結局、君の好みの話しにしかなってないと思うんだけど >>53
実質無理というのは足蹴にされてきて
俺が無理矢理そういうのを受け入れようとしたら批判された経験からだ
だから今後もそういう質問が来たらきっと「荒れる」んでしょ?という皮肉だ
だからそうじゃないというならそれをテンプレに明記して欲しい
「Web技術を使うJSの話題であれば何でも受け入れますよ」と
それなら俺の100スレの怨念も浄化される その辺の話になると板分けの問題になってくるな
開発環境以外でのNodeの話ならム板かwebprog板じゃないか? >>50
高速化の質問についてはコードが出ているなら、「自分で試せ」で終わり
「このコードはどちらが早いですか?」
「このコードは動きますか?」
こんな質問は実装以前の問題だ
自助努力を推奨するスレとしては「自分で試せばわかる事は、自分で試せ」の答えしかない >>55
何回か大統一の話もしたこともあるけど
統一も分離も曖昧にするのもやっぱり問題が出るんだよね
やっぱり俺のワガママだったわ、これまでのレスは無視してくれ
すまなかった >>54
「君のつらい経験」や「君のやりたいこと」で煙に巻くのはどうかと思うけど…
主観的な考えが多い人だねえ 実用厳禁★独自拡張、草案段階のJavaScriptについて
https://mevius.5ch.net/test/read.cgi/hp/1495948526/
純粋に仕様等について語りたい・空中戦をしたいならコッチだろ
このスレは理論のためのスレじゃない >>59 俺はそういうことが言いたかったんじゃないよ >>57
多分、自覚症状がないようだから、あえていうが、君の考えは「客観性」がまるでないから、受け入れられないんだよ
「俺はこうしたい」「俺はこうだった」「俺は無理だと思う」
これは全部、君の個人的な考えで他人を説得できる根拠じゃない(君を信頼している人なら受け入れるかもしれない)
100スレ前から受け入れられなかった原因も、その辺にあるのではないかと思うぞ >>52
> 過去ここで古くはWinメトロの話題からNode上でのStreamの話題や
> 様々なプラットフォームの質問が足蹴にされてきたのを見てきた
そんな大昔のことは知らん
直近2か月程度では、形式的に足蹴なんてあった覚えがない
あったというなら具体的にリンクを挙げたまえ >>60
それでは
どういうことが言いたかったのか、具体例を挙げつつ論理的に述べてくれまいか
貴殿が言いたいこと、具体的にところが把握できない
他の人々にも、把握されているようには見えない
コミュニケーションなんだから、そこんとこ頼む Web のユーザーインターフェースとして第一義に考えられるのはブラウザ
具体的には、Chrome / Safari / Firefox(状況次第で IE11 またはそれ以前)
これが大前提として共有されないんだったら前提から色々崩れるんだけど
opera とか vivaldi とか含めるとカオスだからゴメン 「回答できる」と「質問していい」は別問題だと思うのです だとしても形式的に蹴られてる記憶が無い
昔のことは知らない 俺も記憶にないなあ
「Node.jsの回答なんてお前らできないだろ?」な煽りは昔、あったような気もするが、それかね 具体例挙げるなら
Q: オブジェクトのディープコピーをしたい
A1. jQuery 使え
A2. lodash 使え
A3. 「使える」ライブラリなりプラグインなりモジュールなり使え
A4. オレオレ関数なりメソッドなり作れ
他に何かあるかな(具体例でも第5の回答例でも) >>68
それはライブラリ質問を禁止する例じゃないのか?
実装系質問を禁止する例が来ると思っていたのだが
あと、ディープコピーなら JSON.parse(JSON.stringify()) が何度も出てたし、ライブラリしか回答がなかったかのような表現は改竄が過ぎる >>70
それは質問者の要件に依る
そもそも、質問者はいつも質問だけして回答を放置してるから、要件不明瞭でどれがマッチするか全くわからん >>68に関していうなら、「ライブラリ房」の存在が元凶だから、彼を排除する方針を決めるだけでいい
実装系質問が実質無理な理由ではない そうそう
新たな〇〇房が現れたらその都度対応するだけの話 >>44
だから実際のブラウザの話を抜きにするというのなら
実際のブラウザで動くことを前提として
質問が受け付けられなくなるんだよ。
Chromeで動きません。→実際のブラウザの話はしないでください。 ■質問テンプレート
【環境】OS, ブラウザをバージョンと共に記入してください。
これもなくさんとな。仕様の話しかしないんだから
OSやブラウザのバージョンなんか関係ない 実装無視の話なんてヨソでやってくれ
誘導
実用厳禁★独自拡張、草案段階のJavaScriptについて
https://mevius.5ch.net/test/read.cgi/hp/1495948526/ >>31 のリンク先の内容がカビ臭すぎ
どこから手をつけるのが良いか分からんけど、リンクしない方がマシなんじゃないかと(主観 >>37
前スレの運用からみて
無視 or ライブラリスレ誘導で良いかと ◆ HTML Standard (HTML5)
https://html.spec.whatwg.org/multipage/
リダイレクトがいつまで続くものやら
あえてテンプレから消すのも手かも知れず >>74
ちゃんと書いてあることを読んでよ
あくまでWebの仕様外の話に絞って言ってるでしょ
パフォーマンスとか、細かなセキュリティポリシーの違いとか、Web仕様で定義されてる以外の
そこはブラウザ開発者の考え方次第、実装のされ方次第の問題だよねっていう所を言ってるんだよ? パフォーマンスや細かなセキュリティポリシーの違いは
Webの仕様で定義されてないって言ってる? >>82
横から口挟むけど、続けるなら、「実質無理」の理由を明らかにしてよ
見る限り、誰も納得できてないよ > 見る限り、誰も納得できてないよ
というより理由はまだ出ていない
>>68は実装じゃなくてライブラリの質問だった ああ、ひょっとして、>>50か?
>>56で論破されてから反応がないが >>46
> Webというものがブラウザのためだけのものでなくなって久しいんだから
> 基本ポリシーとしてブラウザの話も受け入れるのならば
> ブラウザ以外のWeb技術を導入しているプラットフォームの話題も受け入れないとおかしいことになる
>
> 俺はそれが実質無理だろうと思ったから、ブラウザも含めてプラットフォームの話は無しにしたほうがいいと言ってる
「実質無理」の論点ってここ?
質問者が質問する分には、幅広く間口を取っておいていいとおもうよ
回答がつくかどうかは別問題
こんなのを論拠に「ブラウザというプラットフォームの話を無しにする」って方がありえんし誰も幸せにならないだろ
メリットあるなら教えて欲しいもんだが 50スレ前からいる俺は、>>74を「仕様の質問だけに限定するのは実質無理」と受け取ったが、100スレ前からいる彼には深い考えがあるのだろう。
- コードの動作確認が出来ない
- デバッガも使えない
- 仕様を読み取ってコードを書き、思考実験を繰り返す
この困難な状況をどうやって打開するのか、実に興味深い。
若輩者の私に、ご教示頂ければ幸いである。 実質無理と言ったのは
>>54で書いたようにそういう話題を完全に受け入れるというスタンスでもないし、
その逆でも今はないんだから、今までの様に穏やかにいられないんでしょという皮肉
そして>>82でも言ったが誰も仕様の話しかしてはいけないとは言っていない
仕様から離れたプラットフォームの話、つまり具体的に言うなら
普遍的なWebというものから離れたブラウザ固有の仕様の話は受け入れるべきかという話
デバッガは開発ツールなので今までWeb仕様とは別の体感できる動作についてて主に話してたのとは
ちょっと系統は変わるが、それでいうとそういう開発外部ツールの話を受け入れるのであれば、
同様にトランスレータだったり、オーサリングツールの話も受け入れるようにしないと
それこそ好き嫌いのとくに理由のない恣意的な差別になる
別に俺はどちらでもいいんだが、俺が一番言いたいことはそのどちらと決まってないことで
スレチだの何だのと不毛に荒れるのが嫌だから、せっかく今テンプレ議論がされてるから
この際にそういうスタンスもある程度決めて明記しておこうということ
まあそれで荒れなくなるかどうかは分からないが、少なくともどういう質問・回答の仕方をしたらいいのかの目安にはなる >>91
長文ご苦労様だが、
> 今までの様に穏やかにいられないんでしょという皮肉
根拠があなたの頭の中にしかないから、以降の話が全く頭に入って来ない
何度言われても根拠を出さないのだから、「根拠が全くない」か「感想が根拠だと思っている」のどちらかなんだろうな… 「俺はこう思う。お前らもそう思うだろ?」
→「そんなわけないだろ」(反対者多数)
→「なんで俺の思い(イメージ)を分かってくれないんだよ!」
今のところ、こんな印象 勉強中のものです。
「そこに何を代入しても何も起こらない、メモリも食わない、エラーにもならないオブジェクト」ってないものなんでしょうか。
例えば var element にDOM要素が入っているとして element.value="piyo"; という命令があるのはよくあるパターンですが、
このelementに中身が入ってないとエラーが出たりしますよね。
私は、いちいち if (element) element.value="piyo"; というふうな中身の確認をせずに、代入をできるようにしたい
(element の中身が「それ」なら、何も起こらず、エラーも出ない)んです。
こういうブラックホールみたいな値やオブジェクトみたいな存在ってないんでしょうか。 >>94
> このelementに中身が入ってないとエラーが出たりしますよね。
> 私は、いちいち if (element) element.value="piyo"; というふうな中身の確認をせずに、代入をできるようにしたい
例
https://developer.mozilla.org/ja/docs/Web/API/Document/getElementById
> 文書内に一致する要素がなければ null です。
.getElementById の返値をチェックすれば? >>94
jQueryがそういう設計になってる。
例えばその例ではvalueを設定しているが、
jQueryの設計では「"0個以上の要素"に対してvalueを設定する」という書き方をする。
だから要素が見つからなくてもエラーにならないし、複数見つかれば複数設定できる。
いまだにブラウザ間の互換性問題が解決したからjQueryはいらないなんて言ってるやつがいるが
こういう設計がDOM APIとは異なってる(使いやすい)ライブラリなんだよ。
で話を戻すと、jQueryでは $('.foo').val('piyo') みたいにセレクタで指定することが多いが、
$(elemment).val('piyo') みたいに単一の要素を指定することも可能。
この場合、elementの中身が入っていなくてもエラーにならない。
(elementの取得だけDOM APIを使うこともないだろうから普通にセレクタ使えばいいだろうけど) >>94
変数にする以上はメモリを消費するので、メモリを消費しない方法はない
変数にしなければ、当然、メモリは消費しない
if (typeof element !== 'undefoned' && Object(element) === element)
element.value="piyo";
メモリを度外視するなら、Object.create(null) でラップオブジェクトを作って、setterかnew Proxyでプロパティを監視する事で実装可能 jQueryってメモリ消費しないんですね。ありがとうございました。 >>92,>>93
なんか勘違いしてるのかもしれないけど
思いを分かってもらいたいわけではなく
何か揉めたときに、テンプレに「自ら学ぶため」という言葉があれば
まあそれを持ち出して決着を付ける事が本当に良いことかは置いといて、
一応このスレのスタンスだからと言えるでしょ
でも今のままでは、俺が折角マニアックな質問を色々調べて回答してあげても
それにスレチだなんだケチがついたときにどっちが正しいとも言えず永遠喧嘩になるでしょ
それはどちらが悪いとかじゃなくて俺と彼とで考えるこのスレで扱うものの基準が違うという事で、それが何処にも示されていない以上、個人の好みになっちゃうんだから
それで俺も彼も質問者も不幸になることはもうやめたいんだよ
俺はpart20かそこらから質問回答してきて、自分だったり他人だったり実際そうやって嫌な思いを沢山してきたから
不幸になる人が少しでも減るようにテンプレに基準を入れてほしいと言ってるの
別に崇高な一般論を理解してもらおうと主張してるわけではない
最初からそういう俺の小さなお願いのつもりだったのに
なんでこんなに突っ込まれて話が大きくなったんだろうね?
もう俺のことはスルーしていいよ >>94
falsyな時だけ「空のオブジェクト」を代入するなら、こういう書き方はある
>>97は一つのオブジェクトで一元管理する
var element = document.getElementById('foo') || Object.create(null);
>>98
そんなわけない
変数にする以上は、メモリを消費する(>>97) コードは長くなるけど変数使わないからメモリ消費しないんだぜ!
↑
そのコードを入れておくメモリが消費される >>100
この質問の本質は、そういうコードを書きたくないということでしょう? 結局何をしたいのか分からん
C言語だって char *a = "abc"; と書いたとき、ポインタ a の分だけメモリ喰うわけだしな
したいことと、典型的なコードでなってしまうことの差が
具体的に分からないと何ともいえない
https://jsbin.com/yemedon/edit?html,js,console
こういうのとは違うみたいだし 無理矢理いえば test() の返値は必ず入る
アセンブラのときにレジスタに必ず入るかどうかは知らない
0 との比較の場合はアセンブラ的には即値0が必要とならないケースが多い、はず
RISCでどうなるか等は知らない
サボリのためCASLの仕様書は読んでない 変数は必ずしもメモリを消費しない
インライン化とエリミネーションで半分程度削減される
だからデバッガを有効にしてるとメモリを食う > 私は、いちいち if (element) element.value="piyo"; というふうな中身の確認をせずに、代入をできるようにしたい
そもそも、これって vanilla JS で実現できるの? 入力があって、出力対象となるべき要素がなければ
parentNode に appendChild() するのが自然な考え方にもおもえる
無視して良いという仕様なのだろうか(そうだとしたら while で終わりか?)
メモリどうこうより仕様が気になるな
それとも「じつはライブラリ房でした」というオチなのか Rubyには通称ぼっち演算子っていってね、
a=nil
a&.foo
# =>nil
みたいに、値がnilでもエラーにならない方法があるんだよ。
どうせこれのこと言ってるんっでしょ?
でもね、コード上メモリを使ってないように見えても、
アセンブラレベルで見れば「if nil だったら nil を返す」って
コードになってて、コードの分のメモリ使ってますからw >>107
いつものRuby厨がしたり顔をしにやってきたが、
言いたいことを先に言われ、良い所を
jQuery厨に持っていかれたという流れw イケてる言語のNull条件演算子:
C#
?.
Swift
?.
Kotlin
?.
イケテナイ言語のNull条件演算子:
ブビィ
&.
ムダな認知負荷の大きいクソ言語。 https://jsbin.com/hidafon/edit?html,css,js,output
ふむ…
あろうが無かろうが問題なく書ける場合もある、か
むしろ出力先等が無いのにスルーされると、バグが潜在化しそうな気もするけど、まあいいか
どういう場面で幸せになれる実装なのか分からん
strlcat / strlcpy みたいなものかしらん > むしろ出力先等が無いのにスルーされると、バグが潜在化しそうな気もするけど、
それは設計思想がわかってないから。
CSSと同じだと考えればいい。
CSSは要素があろうがなかろうがエラーにならない。
これは宣言型プログラミングの思想だよ。
https://ja.wikipedia.org/wiki/%E5%AE%A3%E8%A8%80%E5%9E%8B%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0
> 宣言型プログラミング(英: Declarative programming)は、
> プログラミングパラダイムの名称だが、主として2種類の意味がある。
> 第1の意味は、処理方法ではなく対象の性質などを宣言することでプログラミングするパラダイムを意味する
出力先に対して処理するという設計思想ではない。
出力先はどういう性質かというのを記述する。
要素に対して値を入れるのではなく、その要素はこういう値であるという宣言を記述する。
そうすることでその要素があればそういう値であり、要素がなければないというだけの話になる。
処理ではなく宣言なのでわかりやすくバグも少なくなる。 >>102
>>100を関数化するだけで、
foo(element).value = 'bar';
と書けるし、それでも「関数を書きたくない」というなら、巨大な関数である jQuety()を定義しているコードに魅力を感じるのは本末転倒
明らかにjQueryの方がメモリ消費量が多いわけだから、「メモリ」の観点ではjQueryにメリットはない >>113
> 「関数を書きたくない」というなら、巨大な関数である jQuety()を定義しているコードに魅力を感じるのは
jQueryを使うなら「関数を書かなくていい」じゃん
「関数を書きたくない」という要望を見事に満たしている。 そもそもプログラム書きたくないんですけどどうしたらいいですか? >>114
「メモリも食わない」の要件を満たしてないじゃん >>116
それは「すべてのものはメモリを食う」という結論で終わったろ? そもそも、>>102は質問者なのか?
他人が悪のりしてるのか、質問者本人なのか分からん jQueryはscript要素を余計に書かないといけないので、面倒くさい そんな面倒くさがりの君にプレゼント
Object(element).value = 'bar';
ライブラリ使うよりお手軽だよ!
メソッド呼び出しは要件にないから知らないよ!
そもそも、NullPointerExceptionはエラー検知として捉える向きもあるので、一概に悪いとはいえない(上で懸念されてるのはそういうことかと)
ポリシーの違いを他人を批判する理由にするのは止めよう >>1参照 無いときにエラーにしたくなくて、あるときに全ての要素を対象にしたければ
DOM APIには複数要素取得する手段がいくつもあるんだから
それでmapなんかで回せばいいだけじゃん >>112
どうだろう
CSS はデザインの話で、コンテンツそのものの話とは区別されるんじゃないかと
> 出力先はどういう性質かというのを記述
これなんてまさにそれ
オブジェクトのプロパティに値をセットしたつもりが
そもそもオブジェクトありませんでしたー
でエラーが出なくて幸せになる具体的なシーンが思いつかない、というのもある
「『対象の性質を宣言』しようとしましたが、その対象は存在しませんでした」ってことでしょう? >>124
1. elements を取得します
2. elements.length を使って for ループして item(i) 等で個々の element を取得して処理します
コレではダメ? >>127
NodeListは普通にfor(let elm of list)で回せる >>128
最近のブラウザは大丈夫なのかな
以前、調べたときには仕様はOKだったのに、iterableではない実装が結構あった
Symbolで自前定義したけど >>120
> メモリ消費量が違う
せやね。メモリが640KBしか無いような環境は問題になるだろうね。
ブラウザが動くのか知らんが > ・回答には多様性があります。他人の回答を尊重してください jsにも ?. が実装される草案は先送りになったのかな jQueryが消費するメモリ
→大した消費量じゃない!
自前で関数ちょこっと書くのに消費するメモリ→
とんでもないメモリ消費! >>137
先送り??
tc39の制定プロセス知らないの?. その煽る気満々の内容で質問者に回答してやればいいのに、これだからマウント君は >>137
ES全体的に前みたいに大量の草案をガツガツ進める雰囲気じゃなくて
細かい仕様をより小規模なミーティングを頻繁にして少しづつ着実に落ち着いて進める感じになってる
その上でオプショナルチェーンの進歩状況はやや鈍調
本来なら輸入構文で順調に行くはずだけど、
ついでにこれもセットで欲しい機能のオプショナルコールについて問題を抱えていたので
あまり進捗してこなかったのが、直近のミーティングで前に進んだ
もう一山か二山あるだろうけど、ゴールの明かりがちらりと見えた所 firefox x64 + Stylus + Greasemonkey
とあるよく利用しているサイトが今一つ使いづらいので、
Stylusの自作スクリプトで必要以上の余計な広告を非表示にし、
非同期処理させて処理の高速化を図りました。
改めてそのサイトのソースを見たらsetTimeoutで特定の広告を少し時間差を置いて表示させ、
更に時間差を置いて記事部分を表示させるなんてことをやっていることが判明。
即時表示させる手段はないかと、StylusかGreasemonkeyでsetTimeoutの無効化とか、
そのスクリプト自体の上書きか無効化が出来ないか試行錯誤中。
どなたか、何かアドバイスなど頂ければ幸いです。 元あるものを改変するのではなく記事の内容を取得して表示するリーダーアプリを作ったほうが聡い >>133
そのまえに html コンテンツと gif / jpeg 読み込んだだけで溢れかねない
15.6MB でも足りないページは一杯ありそうだしね
都度で swap とか悪夢だろうが CF カードにキャッシュ置ければマシか …もともとがRuby房召喚のためだけの質問っぽいけど…
>>112
> 出力先はどういう性質かというのを記述する。
element がらみの場合は DOM ツリーの適切な場所に適切な要素を記述し
その要素にその性質を記述するものではないのかしらん
まとめたければ DocumentFragment 使うとか、元質問に即して言えば事前に createElement すれば良いんでないかい
ただ、元質問は「対象が存在しないときにスルー」って言ってるんだから「宣言型プログラミング」とやらは今回別に要らないでしょ
コレクションのアイテム数を数え、アイテム数を越える分は処理しなければ良いだけ
…ってのを >>111 のリンク先で書いてみたんだが… >>94
?. は、NULL 許容(エルビス)演算子だろ。
横から見ると、エルビスプレスリーに見える
Ruby では、関数名の最後の文字に、?, ! が使える
? は、真偽値を返すメソッド名に使う。
! は、レシーバーの内容を変えるメソッド名に使う
このルールがあるから、可読性が高い!
その代わりに、エルビスが使えないから、&. を使う 俗称エルビス演算子は?.ではなく?:
これだからクソ言語信者は。
?.の一般的な名前は>>110 エルビス?
かつて流行した vi クローンで nvi の祖先のこと? 最近、Ruby信者をいろんなスレで見かけるのは、Rubyが下火になっているからか
多言語の機能を取り込むのは良いことだが、機能に拘るのは偏食と変わらないな 文字列が入った配列(例として["aaa","aaa","bbb","bbb","ccc","ccc",…以下1000個ほど続くとする])があるとして、
この配列を「できるだけ似た文字列が並ばないように」並び替える方法ってどんなものが考えられますか?
つまり["aaa","bbb","ccc","aaa","bbb","ccc",…] となるように並べ替えたいです
言い換えれば「できるだけ似てない文字列が隣合って並ぶように」バラけさせるアルゴリズムです
レーベンシュタイン距離でというのも考えましたが「1つ前の文字列からもっとも遠い文字列を」短絡的に並べていくのでは、上記の例でいうと
["aaa","ccc","aaa","ccc","bbb","bbb",…]
というふうに、もっとも遠い文字列を使い果たした後はむしろ近いものが並んでしまうのではないかと危惧してます もっと要件詰めなよ。仕事でそんな発注するんじゃないぞ。 ソートして半分に割って一個ずつ取り出し並べていけば良いんじゃね >>153
「似た文字列」を定義する事から始めては? 「似た文字」は文字の類似度を数値で返す関数がある
という前提でいいだろ じゃあsortにその関数使ったコンパレータぶっ込んで終わり。
はい次。 >>153
レーベンシュタイン距離でいいんじゃないか?
1. 同一文字をまとめて、ユニークな文字列の値、出現回数をまとめた配列(or Map)を作る
2. 隣接要素のレーベンシュタイン距離がしきい値を越えるように並べ替える
3. 1周する
4. 各要素の出現回数を -1
5. 全要素が出現回数0なら終了。一部に出現回数0があったら、2.へ、それ以外は3.へ >>153
例えば100通りランダムに並び替える
その中で10個距離が短いのを選んでそれぞれ10通りランダムに少量だけ並び替える
その繰り返しでいい >>158
素朴な疑問なんだけど、Array#sortって隣接要素の判定条件を指定出来るの?
2つの要素が似た文字列だった場合に引き離す機能がないと実装出来ないと思うんだけど >>153
"aaa"
"bbb"
"ccc"
だけなら、「setにしてdeleteしてランダムに選ぶ」を繰り返せば良くね >>153
const length = 100
const a = ["aaa", "bbb", "ccc"]
let aryResults = []
aryResults.push(a[(Math.random()*3 | 0)]) // 2 ** 31 を下回ることが保証されているので | 0 で可
const l = length - 1
for (i = 0; i < l; i++) {
console.log(aryResults[i])
let setTmp = new Set(a)
setTmp.delete(aryResults[i])
const arrTmp = [...setTmp]
aryResults.push(arrTmp[(Math.random()*2 | 0)])
}
console.log(aryResults)
…例がわるい
「文字列が入った配列」の種類はいくつよ 例えば範囲が、1〜100 なら、
1, 100, 2, 99 みたいに取っていくと、
最後には、50 近辺の数字ばかりが残るから、ダメ!
無数のアルゴリズム・シミュレーションを繰り返して、
合計距離が多くなるように、しないといけない // 出現回数は考慮しないものとする
// 小文字アルファベット a-z から選ぶものとする
const length = 100
const threshold = 10
let a = []
let place = []
let aryResults = []
for (let i = 0; i < 26; i++) {
let strTmp = String.fromCharCode(0x61 + i)
a.push(strTmp)
place.push(-threshold)
}
for (let i = 0; i < length; i++) {
let t = i - threshold
let setTmp = new Set(a)
for (j = 0; j < 26; j++) {
if (place[j] > t) { setTmp.delete(a[j]) }
}
const arrTmp = [...setTmp]
let x = (Math.random() * arrTmp.length | 0)
place[x] = i
aryResults.push(arrTmp[x])
}
console.log(aryResults) >>153
うーん
定性的な部分をどうにかしないと書けないな
「似た文字列」
何をもって「似ている」と判断するか基準不明
「できるだけ似た文字列が並ばないように」
→どの範囲で許されるのか
高田馬場1丁目1番地、2番地…
高田馬場2丁目1番地、2番地…
高田馬場3丁目1番地、2番地…
高田馬場4丁目1番地、2番地…
高田馬場5丁目1番地、2番地…
西早稲田1丁目1番地、2番地…
西早稲田2丁目1番地、2番地…
西早稲田3丁目1番地、2番地…
西早稲田4丁目1番地、2番地…
西早稲田5丁目1番地、2番地…
とかなら、まだ分かりやすいだろうけど(高田馬場m丁目と西早稲田n丁目の遠近は度外視として) >>165
その問題は>>159で解決してるんじゃないか? 厳密には、先頭/末尾の繋ぎが未チェックという問題が残っているが…
2.のソート時に繋ぎを意識したsortにして、5.から2.へ行く前に直前要素と先頭要素を比較する処理を入れてやれば良さそうだ >>170
>>153ではaaa,bbb,cccが何度も登場してる
そもそも、重複がなかったら、この質問は成立しないわけで >>171
それなら >>164 のように完全ランダムにするか、
3つの順列をセットとして 3P3 = 3! = 6通りから、末尾の文字と異なる文字で始まるモノで並べて行くか
完全ランダムだと残り物にバラつきが出すぎる可能性はあるけど
3つの順列で心配なら
a - b - a - c - b - c
a - b - c - a - b - c
a - b - c - b - a - c
a - b - c - b - c - a
(以下省略)
とかいう組み合わせを事前に作っておいて並べて行けば良いんじゃね
バラつき具合の判別方法は知らんけど… 難しく考えすぎ
期待値に達するまで適当に振り分続ければいいだけ
あとはその振り分けアルゴリズムが完全なランダムより賢ければ賢いだけコストが減る
それを十分な状態になるまで追求すればいいだけ >>173
振り分けアルゴリズムの質問にその回答はなかろうて 「ナップサック問題」でも「全検索」は解の1つ
エレガントではないかも知れないが、不正解という評価は誤り https://postd.cc/programmer-competency-matrix/
いきなり「レーベンシュタイン距離」と書いたとしても、他の人に理解されるとは限らん…
元質問者の場合はそうではないようだが こういう時は発送を逆転させる
つまり良い分配アルゴリズムではなく、悪い整頓アルゴリズムを考える
それで思いつくものを現実的な妥協点として良いと思う
そういう意味ではランダムは悪くない 最初ランダムで走査して固まってる部分があったら適当に入れ替えてほぐす
その繰り返しはどうだろうか? >>171
配列を splice() すれば良かろう
人にケチ付けてる暇があったら改善案出せよ無能 >>175
> 「ナップサック問題」でも「全検索」は解の1つ
「全検索 アルゴリズム」でぐぐっても見つからないが、もしかして「全探索」といいたかったのか?
全探索は「全ての組み合わせを試す」というもので、1000個の要素なら、最大試行回数=1000*999*998*...*3*2*1回となる力業
> エレガントではないかも知れないが、不正解という評価は誤り
>>173は「失敗したらやり直す」なので「全探索」とは違う
「振り分けアルゴリズム」に欠陥があれば、永久に失敗するので無限ループとなるし、アルゴリズムの成功確率が低ければ、試行回数は全探索よりも高くなる可能性が高い
アルゴリズムに欠陥がない場合の最大試行回数は「1〜∞回」で運要素の高い方法 >>180
>>170は
> Set 使えば登場回数ゼロはありえないだろ
とケチをつけたが、>>159の回答を咀嚼すれば「登場回数」がそういう意味ではないことが分かるはずなので、それを指摘しただけ
> 人にケチ付けてる暇があったら改善案出せよ無能
これは>>170にいいたい >>181
>>173は失敗したらやり直すのとは違うでしょ
遺伝的アルゴリズムと言ったら大げさだけど、モンテカルロ法で円周率を求めるのと同じくこの手のアルゴリズムは運任せでも現実的には収束していくんだから
この手のアルゴリズムで不運が重なって想定よりも遥かに時間がかかる事を想定するのは、計算中にマシンが突然クラッシュしたりビットアップセットを起こしたりするのを心配するようなもの
最善でなくても一定の期待値を越えれば良いというときには良いアルゴリズムだよ >>181
1000は無いだろ
選択肢3つなんだから、たとえば1002個あったと仮定して、
同じ選択肢が決して連続しないのは大前提だろ
「できるだけ似てない文字列が隣合って並ぶように」って言ってんだから
ケチばっか付けた挙句完全に誤ったこと書いてんじゃねえよ無能 ランダムに(または、ルールで制限しつつ)シャッフルして、
許容回数実行して、最善のものを選ぶ
最良のアルゴリズムを考えなくて良いから、
これが簡単で現実的で、そこそこ良い結果も得られる 要約すると
「できるだけ似た文字列が並ばないように」並び替えるアルゴリズムは思いつかないので
「ランダムに」並び替えるアルゴリズムでごまかしましょう >>184
結局、「全検索」のアルゴリズムを説明出来てない
オレオレ用語を使わず、一般的な用語を書け 重複しない整数からなる4個以上の数列がある
例 1,2,3,4
これを並び替えて、隣り合う数の差が2以上である
並びとして次のようなものが考えられる
例 3,1,4,2
この数列が大量(例1 000個)にあるとき
隣り合う数の差が2以上に並び替えるアルゴリズムを考えよ
また、隣り合う数の差の合計が最大になるアルゴリズムを考えよ
アルゴリズムは高速であればあるほどよい
参考 隣り合う数の差の合計
3,1,4,2,5 の場合 2+3+2+3=10
4,2,5,1,3 の場合 2+3+4+2=11 >>187
逆でしょ
何が効果的か根拠も自信もなくて抽象的で実装できるかもわからない理論よりも
ランダム探索でそこそこの結果を得ればいいと割り切る方が誤魔化さずハッキリしてるでしょ 1000個もいらんかね?
100個でも総当たりするのは十分しんどいレベルになるな
9.3326215443944152681699238856267e+157 >>190
そこそこ結果でOKなんて誰が言ったんですか? 1文字目で分類して最も多いものから順に均等に振り分ける
その振り分け範囲内で2文字について同じように振り分けなおす
短文字ではこれを繰り返すのが最もコストが少なく並び替えられる >>189
質問は文字列だぞ?
簡単に数値に置き換えられ無いだろ >>189
0,500,1,501…なら499001
500,0,999,1,998,2…なら499999
ちなみにランダムで1000回試行で350000、100000回試行で360000程度
最低限何らかのアルゴリズムは無いときつくね? うわ
マウンターばっかり
屁理屈こねまくって重箱の隅をつつきまくって
1行もコードも何も具体的なモノ書かずに
良く上から目線で書き込めるもんだ >>153 における
> 文字列が入った配列(例として["aaa","aaa","bbb","bbb","ccc","ccc",…以下1000個ほど続くとする])
の構成要素が、具体的に ["aaa,""bbb,", "ccc" ...] 以外何があるか回答がない
釣り確定だな >>198
どんな文字列が入ってきてもって意味だろ
答えられないからって釣り認定するなよ >>199
板違い
そういうのは計算機科学の研究室でやれば良いし
Web制作との関連性も皆無 このスレの質問者は、回答があってもガン無視する奴ばかり
回答に意見を返して、前向きに取り組もうとする質問者はいないのか?
「自ら学ぶ質問者」を見たい >>203
それ以前にまともな回答でてねーじゃん
呆れてどっか行ったんじゃね >>204
君のようなコミュニケーションを拒否する人は、質問者に向いてないと思うよ 皆が色んなアルゴリズムを比較しやすいように基盤を作ってみた
https://playcode.io/371956?tabs=script.js,preview,console
条件として、ある文字列のある位置の文字を取り出したときに、
同じ位置に同じ文字がある文字列がどれだけ近いかを全ての文字列の全ての文字で見ることで
似た文字列がどれだけ近くに固まっていないかの値を求めるようにした
つまりABCDのよこにBADCがあってもそれは限りなく無関係同士の文字列と評価されるので
そこが気になる人は評価計算部を変えて欲しい
それと各文字の出現頻度はだいたい均一と仮定している(Aが極端に多くてBが極端に少なかったりしない)ので、
そこも生成部に手を入れて変えて欲しい
また、距離に対して比例して評価していてすぐ隣と、1つ開いている状態はあまり違わないと評価するのでそこも手の入れどころ
とりあえず様々に実験して気がついたこととしては、
・各文字の出現頻度、組み合わせ方に偏りがない
・文字種類数が少ない
ときはそもそも、どのように並び替えても似た文字列が近くに来てしまう状況になる
例えば上の例であったような、ABCのように単純な文字列はまさにそうで、
何か組み合わせに特別な偏りが無い限り、一回ランダムにばらした状態でほぼ限界に近い 「まともな回答ない」で諦めるか、「質問の要件を追記して更なる回答を募ろう」と踏ん張るか、が判断の分かれ目
実際、要件をまともに書いた質問はほとんどない 要件をまとも書けるくらいの質問をする人ならば、
自力で解答を見つけることが出来る。 質問しようと文章でまとめてみたり、ggrks呼ばわりされないように検索してみたりしているうちに
解決方法が見つかることが稀によくある >>209
>質問しようと文章でまとめてみたり、
質問しようと文章以外の、例えば数式でまとめてみたりすることはあるのか?
とつっこんでみたり 「AしたりBしたり」と書いてあるのを「AとBしかしない」と解釈するひとって… 結局、質問者が回答を煽って、魚を期待するスレなのか 定性的発言で申し訳ないが…
…内容的には良くなったと思うよ…
マウンターと暴言のオンパレードだった訳だしね 質問者が出てこないから、「質問スレ」としては機能していないと思う
「お題」を与えられた回答者が意見交換or布教活動してるだけ
そこに、煽り、マウントが入るとgdgdになる じゃ、こっちで質問をば…
+ JavaScript の質問用スレッド vol.123 +
https://mevius.5ch.net/test/read.cgi/tech/1491143438/183
https://leetcode.com を始めました。
そこで、質問です。
var toLowerCase = function(str) {
const length = str.length
let str_result = ""
for (let i = 0; i < length; i++) {
const char_code = str.charCodeAt(i)
if ((0x41 <= char_code) && (char_code <= 0x5a)) {
str_result += String.fromCharCode(char_code + 0x20)
} else {
str_result += String.fromCharCode(char_code)
}
}
return str_result
}
console.log(toLowerCase("Hello"))
console.log(toLowerCase("here"))
console.log(toLowerCase("LOVELY"))
こんなコードを書くのは少数派でしょうか? str_result += ((0x41 <= char_code) && (char_code <= 0x5a))
? String.fromCharCode(char_code + 0x20)
: String.fromCharCode(char_code)
…とか… そもそも条件は?
何を持ってどこまでの範囲をLowerCaseと言うの?
例えば標準ではアルファベット以外もサポートしてるよ
"Α".toLowerCase() //"α" >>218
> 何を持ってどこまでの範囲をLowerCaseと言うの?
https://leetcode.com/problems/to-lower-case/
> Implement function ToLowerCase() that has a string parameter str,
> and returns the same string in lowercase.
>
> Example 1:
>
> Input: "Hello"
> Output: "hello"
>
>
> Example 2:
>
> Input: "here"
> Output: "here"
>
>
> Example 3:
>
> Input: "LOVELY"
> Output: "lovely"
たしかに「厳密な範囲」は示されてないですね。
Example にあるものが回答できれば "solved" という状態になるので
アルファベット26文字に対する変換が出来れば充分、ということになります それで一番の目的は速度ってこと?
ならバイナリ化してWASMに渡すとかも選択肢なの?
でもそういうのって往々にしてオーバーヘッドが大きいから
例文の様に短文字だと悪手だよね
それともう一つ重要な点として大文字小文字のアルファベットしか入力されないの?
それだったらパフォーマンスとコーディングのシンプルさを両立して
チェックもせずにテーブルで変換とかも容易にできると思うけど
もしくは適当でいいのならreplace使ったりしても良いんじゃないの?
前提条件がサッパリ分からないから、まず>>215さんが
どうしてそういうコードを書いたほうが良いと思ってるのかが疑問 別解が知りたいだけです
配列を2つ作って1文字毎に変換するなり、ハッシュで変換する方法もあるでしょう
>>218 のようなものも含めるなら、変換テーブルを自前で持っておく方が良いようにも思われますが
これは別問題ですね
String.replace() を MDN で読んでいて思ったんですけど
Javascript の string ってシングルトンパターンなんですかねえ >>222
プログラム板に別解があるようだが、あれで満足?
ただの別解で難の制約もないなら、いくらでもコードはありそうだけど 既に動いているコードがあるなら、別解を求める必要は普通はない
理由があるはずだが、「別解が知りたいだけ」だし、どんなコードでも受け入れると
アンケート系は勘弁して欲しいな… >>222
replaceなどの結果がキャッシュされるような仕様はないが
別にキャッシュしても仕様に違反しない
JSは仕様と実装が完全に切り離されているのでそういう部分は実装次第
別解が知りたいというけど問題が単純すぎるのでアルゴリズム的別解はない
文字を文字として見てテーブルで変換するか、
文字コードとして見て演算するかくらいしかない
だから単純にJSの基本、アルゴリズムの勉強問題として見れば問題ない
だけど良いコードパターンで書けてるかというと違う
それが今回の例で実際に問題になるかは置いといて
文字列を変換するときの一般的な良いパターンとして
まずサロゲートペアを意識すること
つまりcharCodeAtなどではなくcodePointAtを使う
もしくはfor-ofで文字を取り出す
そしてマジックナンバーは使わない
コードに突然0xなんちゃらと現れても大抵の人はそれが何を示しているのか分からない
だから”A”の文字コードは事前に'A'.codePointAt()などで求めておいて定数に格納しておく >>225
コードに突然0xなんちゃらと現れても大抵の人はそれが何を示しているのか分からない
だから”A”の文字コードは事前に'A'.codePointAt()などで求めておいて定数に格納しておく
1行目、ものすごく驚きました
EBCDIC を採用するかどうかが実装依存だというならともかく
https://www.ecma-international.org/ecma-262/10.0/#sec-terms-and-definitions-string-value
> 4.3.17 String value
>
> primitive value that is a finite ordered sequence of zero or more 16-bit
> unsigned integer values
>
> Note
>
> A String value is a member of the String type. Each integer value in the
> sequence usually represents a single 16-bit unit of UTF-16 text. However,
> ECMAScript does not place any restrictions or requirements on the values
> except that they must be 16-bit unsigned integers.
という仕様が前提なら、us-ascii / JIS X 0301 そのままの文字コードが殆ど知られてない…
参照:
https://unicode.org/Public/MAPPINGS/ISO8859/8859-1.TXT
https://unicode.org/Public/MAPPINGS/VENDORS/APPLE/JAPANESE.TXT
https://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP932.TXT > だから”A”の文字コードは事前に'A'.codePointAt()などで求めておいて定数に格納しておく
定数に格納するなら、私だったら
/*
0x41 LATIN CAPITAL LETTER A
0x61 LATIN SMALL LETTER A
0x
*/
const int_codePointAtA = 0x41
/*
0x5a LATIN CAPITAL LETTER Z
0x7a LATIN SMALL LETTER Z
*/
const int_codePointAtZ = 0x7a
とか…
即値とメソッド呼び出しの差は分かりませんが…
参照:
https://unicode.org/Public/MAPPINGS/ISO8859/8859-1.TXT >>223
> プログラム板に別解があるようだが、あれで満足?
うーん
どこからどう見ても練習問題なのに… >>224
> アンケート系は勘弁して欲しいな…
具体的なコードが複数あるなら「アンケート」と呼ぶ余地はあるかも知れませんが
今回のコードは具体的なモノが1つしか無いので「アンケート」と呼ぶ余地はないですよ > 別解
for (let i = 0; i < length; i++) {
const char_code = str.charCodeAt(i)
if ((0x41 <= char_code) && (char_code <= 0x5a)) {
str_result += String.fromCharCode(char_code + 0x20)
} else {
str_result += String.fromCharCode(char_code)
}
という部分について、他にどのような考え方があるか分かれば
色々な場面で応用が利くと考え、質問した次第です。 >>220
> チェックもせずにテーブルで変換とかも容易にできると思うけど
> もしくは適当でいいのならreplace使ったりしても良いんじゃないの?
チェックの点は見落としていました
御指摘、ありがとうございます
「Acute 等がついていてサロゲートペアでない」場合を含めてチェックすべきかも知れないですね >>220
> どうしてそういうコードを書いたほうが良いと思ってるのか
古典BASICで言うところの MID$() 関数で1文字ずつ抜き出して FOR ループで回し、
条件分岐で ASC() → CHR$() というのがが真っ先に思いついたからです。
「良いと思った」というよりも、Javascript をメインで使っている人が
自然に思いつくコードを知りたいという思いがありまして。
それこそ、大抵の人はこのような発想を自然にはしないと考えられたのです。
「こういうコードを書いたほうが良いと思ってる」というよりはむしろ「『私は』自然に『思いついた』のです」 >>227
codePointAt() メソッドは存じませんでした。
acute 等の The Unicode Standard Combining Diacritical Marks を含め、挙動等を確認してみます
参照:
Combining Diacritical Marks
http://www.unicode.org/charts/PDF/U0300.pdf >>225
> for-ofで文字を取り出す
これも全く思いつきませんでした
String.length 等も含め、挙動を確認してみます 【補足】
>>234
> 「『私は』自然に『思いついた』のです」
だからこそ 0x61 等が即値 >>230
君の質問はこういう事
- >>215と同じ機能を実装するコード(別解)を教えて下さい
- 他に条件はありません
- いろんなコードが欲しいです
この質問は広くコードを集める為のアンケート系質問と俺は呼んでる
OKWaveだとアンケートカテゴリで質問しないと、NG
君が何某かの具体的な問題に直面しているわけではなく、ただ、広く情報を集めるのが目的だから「要件」はない
ただし、君は>>215で要件を全く出していないにも関わらず、回答に対して良し悪しを評価している
後出しで考え(要件)を出す、一番面倒なタイプの質問者
君は後出しで好き勝手にいえるから気楽だろうが、回答者は要件まっさらな状態で回答して悪評価されたらたまったものではないだろうな >>215は>>99に近しいものを感じる(同じ人かもしれない)
コミュニケーション能力(他人への説明能力)に問題があるんだよな… >>241
"「マルチイクナイ」防止" で予防している割に、爪が甘いな
あるいは、マルチポストの問題点を理解していないのか >>227
知られていないと言ったけどASCIIの範囲ならまだ予想も付きやすいかもしれない
だけどただ単にこのゲームをクリアするためではなくて
これは文字を変換する技能を問うているのだと思えば
特に日本に住んでいる我々はひらがなや漢字の文字コードでマッチさせることも有るだろう
>>228
求められない大量のマジックナンバーならそうして持っておくのも良いと思うけど
今回の場合簡単に分かりやすく求められるんだから求めたほうがより良いよ
>>234
JS界は「自然」の範囲が広いから今回のように単純な問題の場合どう書いても自然だから安心していい
ただ俺だったらこういう感じで書くかな
str.replace( /[A-Z]/gu, c => String.fromCodePoint( c.codePointAt() + 32 ) )
色んな書き方を見て知識を増やしたいというのなら、こういう書き方もできる
new TextDecoder( ).decode( new TextEncoder( ).encode( str ).map( p => p | 32 ) )
モダンな言語としてはif文for文や演算子を減らしてスッキリさせるのが良いと思う
ただバイナリ弄ったりして速度を稼ぎたいときは最適化を期待してあえて古風に書くけどね >>227
> A String value is a member of the String type. Each integer value in the
> sequence usually represents a single 16-bit unit of UTF-16 text. However,
> ECMAScript does not place any restrictions or requirements on the values
> except that they must be 16-bit unsigned integers.
という仕様が前提なら、us-ascii / JIS X 0301 そのままの文字コードとは限らないのでは?
実装依存ということだろう <div id="a">
<span class="b">あ い う え お</span>
<span class="b">か き く け こ</span>
</div>
↑ここからjQueryで
"あ い う え お\n
か き く け こ"
と、文字列を取り出しつつ改行(\n)を挟む簡単な方法ってないですかね
とりあえず
$('#a').html().replace()
でタグそのものを除去しつつ置換するか、
$('.b')に対してeachなどでループする方法くらいしか思い浮かびませんが
何か遠回りしてるような気がして lcoation.reload()を使って何十回も同じページをリロードしていると、
オブジェクトが捨てられないのか、メモリリークしてどんどんブラウザが遅く&不安定になっていきます
ググっても同様の質問はあるようですが、しかし綺麗な解決策は出て来ませんでした
現在のスクリプト等のことは全部忘れていいからただ単純にリロードさせたいだけなのですが
メモリリークしない方法はないのでしょうか?
実質的にリロードできれば変わったトリックでもいいのですが。 >>246
親要素を取得してどうにかする、とか
表示すべきコンテンツが具体的に分からないから正確な所は何とも HTMLCanvasElement.getContext('webgl')で取得したRenderingContextを破棄して
再度同じCanvasElementからRenderingContextを取得することは可能ですか? >>247
ESではUTF16で無いといけないとは決められていないじゃないか
>>251
コンテキストは一度取得するとその要素に紐付いて永続的に残る
同じ状態のものを何度も取得することはできても
破棄してやり直すことは要素ごとを破棄してやり直さない限りできない >>246
textContent
jQueryはライブラリスレでどうぞ >>248
本当にそういうメモリリークなのならスクリプトで対処することじゃない
Webコンテンツというのは残るものなので場当たり的な対応はすべきでない
きちんとブラウザの問題としてissueを投げて根本から対応してもらうべき 広告ブロックや動画ダウンロード等の拡張が原因だったりして 248ですが中間報告をば。
ふと、 location.reload() する直前で document.body.remove() するという手を思いつき実行してみた所
とりあえず1日程度の起動ではブラウザの挙動が悪くならなくなったっぽい気がします
まったくリークしてないかは不明
自分がググった限り(少なくとも日本語と英語圏では)この問題で質問する人はいても
有効な解決策を回答してる場面は見当たらなかったのでこれでいいかどうかは分かりません 何十回もリロードってDDoSアプリでも作ってんのか? >>257
とにかく正確に再現できる最低限の手順を用意してブラウザにissueを投げろ
ここで書いてくれたら検証してこっちでissueを調べて挙げてやってもいい
いずれにしろ今の所君がそう感じるというだけの話だからこれ以上相手にはできない >>258
Distrusting and Cynical? You May be Hurting Your Brain: Dementia Linked to Cynical Distrust : Health & Medicine : Science World Report
ttps://www.scienceworldreport.com/articles/15059/20140529/distrusting-cynical-hurting-brain-dementia-linked-distrust.htm
Why Random Acts of Kindness Matter to Your Wellbeing | Psychology Today
ttps://www.psychologytoday.com/us/blog/emotional-nourishment/201711/why-random-acts-kindness-matter-your-wellbeing これポップアップ用のhtmlなんですが、アラートが出ません
何らかのapiが必要なら教えてください
https://ideone.com/QScjMX
firefoxです こういうアドオンのでバッグをするには、
firefoxの場合、インスペクター>コンソール内のどの項目を使うといいんでしょうか 最近の質問は「調査の丸投げ」って感じだなー
「自ら学ぶ人」の意味をよく考えた方がいい >>252
でも usual だね
EBCDIC でも何でも良いからWeb制作に関する範囲で
UTF-16で実装「されていない」例あるの? ん?ここは実際のブラウザの話はしないんじゃなかったっけ? >>266
>>99ないし>41が「動くかどうかは話をしたくない」といってるだけ
彼一人が守れば良い >>267
> 彼一人が守れば良い
同意。まじソレな。
>>246
こんな感じ
console.log($.map($('.b'), e => e.textContent).join('\n')); >>262
それが動かないのならあなたの環境がおかしい >>267
お前もしつこいな
俺は「動くかどうかは話をしたくない」とは言っていないと何度も説明しただろ
Web仕様が実際どう動くかは勿論話すべき
だけどそのブラウザ固有の問題はどうなんだろうねと言っただけ
そこに関しても話すことを反対してはいないだろ
いい加減にしてくれ つうか俺はむしろマニアックだったりエッジな質問への回答を荒れることなく行える場を作りたいと長年思っていて
テンプレ議論の機会が来たと思ったのでそうした面で基準を定めた方が良いんじゃないかという問題提起をしてみたのであって
俺の思いはあるけどとにかく決まっていることが大事で、決めてくれさえすれば俺は素直にそれに従って回答をしていくと言ってるのに
どう勘違いしたら>>267みたいなほんと真反対な勘違いができるんだろうな >>273-274
>>41だけ読むと、そうは読めなくて、複数のレスを繋ぎ合わせてようやく、解読出来るか出来ないかのレベル
どこで訂正したのか知らないし、どれとどれが同じ人なのかも分からない
後出しで持論付け足しを繰り返してまで自己主張するなら、トリップを付けなよ
はっきりいって、君の説明力が低すぎるのが問題 ここが本スレでいいのか?間違ってたらごめん。
MDNの更新、誰かよろしく。
https://mevius.5ch.net/test/read.cgi/tech/1417749547/341-343
俺はこっちの板は読まないから、用があったら向こうでよろしく。
(最低限の礼儀として今週中くらいは読むけども) >>275
>>41はただの俺(>>36)をからかった荒らしレス
あと絶対に勘違いしてもらいたくないのが自己主張を俺から始めたわけではないということ
俺が>>10のレスを書いた後>>33というレスが来たから俺は33に俺の思いと一般論として>>36を書いたが
その時点では別に俺が10であるというのをアピールする必要性はない
そしてその後も36に対してのレスが色んな人に突っ込まれたためあくまで突っ込んできたその人個人に対して順次個別に説明していっただけ
断じてこれは俺が望んで始めたことではないし、いきなり自己主張を始めたみたいに言われても困る
俺は俺として基本的に俺にレスを付けた人に対して「同じ様に」個別にレスを付けてるだけで
レスも付いてない、なりすましとも言えないような幼稚なレスを見て勝手に同一人物だと混同するのは俺の責任ではない
全部読まないと分からないと言うが、そこも意味が分からない
41を読んで267の発言が出るのは分かる
だが99をどう読んでも267の発言は出ないだろう
俺が怒ってるのは俺の説明を全部推測して漏れなく見ろと言ってるのではない
誰が連続で話してるのかを想定しなかったことではなく、むしろ想定して思い込んだことに対して怒ってる
全部読むどころか、99を全く読んでいないではないか
どうして99が41と同じ、だから99の内容も読まず41が言いたいんだろうと勘違いをし、
しかもそれをコテなどを付けない俺の責任と言えるのか、それが心底訳がわからなくて驚く
基本を言うならばレスなんてそのレスだけを読んで反応すればいいだけだろう
なんで自らわざわざ難しいことをして失敗したことに対して俺が責任取らなきゃならないのか
俺も誰が同一なんて全く気にせず、最後のまとめを除き直接言われたことに対して直接答えることを繰り返しただけだから
マナーとして通しで矛盾が少ないように発言しようとはしてるが、けして連続性にこだわってはないし、
なんか俺が連続して自己主張してるみたいに捉えられると本当に困る
俺はその時その時で最も良いと思ったことを発言してるだけだから難しく考えるな >>272
https://jsfiddle.net/cjh901p6/show
これで押しても反応なけりゃどうみてもおま環
余計な拡張機能が動いてるとか原因は色々
エラーメッセージはコンソールに無いの? >>275
多分俺の説明は分かりにくいだろうからもう一レス追加するけど
俺は>>99に対して>>267のレスが付いたから
99の俺として267にレスを付けてる
まあ99とは言うが99はそれだけで完結していないので
実際はそれに含まれているレスチェーンも多分に含みはする
とにかく俺は>>99の俺として、初めて>>41と混同されたことに対して怒ってる
だから俺にレスを付けなければ別に41と他のどれを混同しようが勝手だし、
もし俺を思って41に反応したレスがあっても41は41で41に対するレスは41に対するレスなので
俺は気にしないというか、その自然な流れを尊重することにしているので入っていくことはしない、実際そうしてきた
だがそこらをもし勘違いしたとして、それは言わなかったり分かりやすくしなかった俺の責任ではない
大々的、ざっくばらんに自己主張演説を俺がしていたわけではないのだから >>277
連続性が重要でないなら、コメントを書いた人にが非難されるだけで「君でない別人」を非難されようが気にする必要はないでしょ
そして、君は「誤解するな。俺がいってるのは...」と弁解する必要もない
君が書いている事と君が過去に書いている事は何の連続性もないわけだからね >>277
> けして連続性にこだわってはないし、
> なんか俺が連続して自己主張してるみたいに捉えられると本当に困る
お前が誰かは知らんが、
>>279
> まあ99とは言うが99はそれだけで完結していないので
> 実際はそれに含まれているレスチェーンも多分に含みはする
レスチェーンをお前が書いたのなら、何連投もしてる
内容が伴っているなら良かったんだが、発展性のない愚痴を延々と語るだけで、皆がうんざりしているのがはたから見ていて良くわかった >>280
俺でない別人を非難しようが知ったことではない
だが事実Aと書いてあることをBと思い、思うだけではなく他人に嘘を教える>>267は
プログラマ精神として、回答者精神として見過ごせない
俺からすると267はJSの型は全てオブジェクトだとかいう発言と同じ
だからつい調子に乗って「解説」をしてしまった
てへぺろ
>>281
うんざりさせてしまって申し訳ない
だけど俺は最初からうんざりしていた
それに対する申し訳ないという気持ちを受け取っておこう firefoxでアドオン作ってるんですが、ページの内容を取得するにはどの辺使えばいいか教えてください
資料がなさすぎる プリミティブ型以外全部オブジェクトなんじゃなかったっけ ごめんなさい>先日御意見・御感想くださった方々
途中経過を下手に書くのもアレですが
「問答まとめ」はココに書いても良いでしょうか >>285
その無駄な1レスで聞くくらいなら素直に書いたら? >>145
ありがとうございました。そういやProxomitronをはるか昔に名前だけ知ってたのですが
こういう凄まじいソフトがあったとはw
特定部分だけ書き換えてそこそこ動くことが分かったのですが、
もうちょっと時間を掛けて詳細な使い方を調べて当初の方針通りsetTimeoutを記述している部分を
別の名前の関数に上書きし時間の部分だけ0にしてsetTimeoutに投げて動かすことができました。
試行錯誤に本当に時間がかかったなあ… >>283
コンテンツスクリプトから普通にDOM操作すればいいだけ >>282
君が書いた事実を確認できるのは君だけ
「嘘か本当か分からないもの」を推測で補完されるのは、止めようがないでしょ
「連続性に拘ってない」と君はいうけど、レスチェーン上では連続性を期待してるし、今だって期待してるからレスが成り立つわけだし
君にレスするには連続性の認識は必須
君は結局、連続性を期待していて、自分の意図が伝わらない事に腹を立ててる
その原因は、「一つのコメントで意図が伝わるように書いてないから」
君にそれが出来れば問題ないけど、今での流れを見る限り出来るとは思えない
だから、トリップをお勧めした コンテンツスクリプトって大雑把にいうとなんですか?
これを指定しないとページの操作は出来ないというところまでわかりますた vs codeってjavascriptのインテリセンス出ませんか?
innerhtmlが出ない >>292
その名の通りコンテンツで動くスクリプト
拡張機能は通常バックグラウンドスクリプトで表示してるサイト(コンテンツ)とは独立に動く
拡張機能から表示してるサイトに干渉するにはmanifest.jsonでコンテンツスクリプトを明示する
>>293
https://mevius.5ch.net/test/read.cgi/tech/1552615295/ >>289
レスチェーン上で連続性があるのは当たり前では?
一つのコメントで意図が伝わるように云々は済まないが俺は必要性を感じていない
質問に対して回答し、それで分からないところがあるのは回答者の責任ではない
質問者が分からないけどどうでもいいやと思えばそこで話は終わりで、
質問者がここが聞きたいと思えばそこをより深く掘り下げていく
質問者が最初に質問しているのだから、自ら学ぶために流れを自由に作るのは当然質問者であるはずだ
回答者がどこまでも質問者のためを思ってこれが1レスで完結している完璧な回答だと押し付ける方がおこがましいんじゃないか?
俺は最初から全てをわかってもらおうという気持ちは一切ない
物事がそんなにシンプルだとは考えていないし、単純化して教えるのは良いことかもしれないがね
ともかく俺のレスに対して気になるところがあれば喜んでその指摘を受け入れるし
それに対して誠実にレスを返すというのが俺の流儀
俺はあくまで1回1回会話を返してるだけだからわざわざトリップを付ける必要性は感じない
トリップを付けろという君がまず付けてみればいいのでは?
というか初っ端の
>>「嘘か本当か分からないもの」を推測で補完されるのは、止めようがないでしょ
という発言から俺には理解できない
多分だけど、君は文章を読む力が弱いんだろう、そこは俺が文章を書く力が弱いのとおあいこだ
俺はどうして怒ってるのかを説明したよね
もしくは君にとっての「推測」とは、目隠しをして当てずっぽうをすることなのか?
君の脳というのはそれほどまでにスカスカなんだろうか
それとも「おあいこ」なんだろうか
むしろ君に興味が沸いてくるね >>294
どうも
ページ内のhtmlで動かすものってことですね
userchromeとusercontentの違いみたいな >>295
そりゃ、お前は困らんだろうな
困るのは周りだけ electron製のフリーソフトってあるんですか?あまり使われていない印象です
firefoxのアドオン作りつつ、electronでデスクトップアプリを作りたい
C#でもいいですけど、、、
同じjavascriptでできるのが良いなと思って、electronも少しづつやってます そうなんですかね
C#もやって、javascriptもやって、となると初心者の自分にはきついので流用できるといいなーなんて。 var get_html = document.getElementsByTagName("html");
window.alert(get_html);
これでhtml collectionというのが帰ってくるんですけど、htmlタグではなくて、全体を取得しちゃってる感じですかね? >>302
getelElement"s"なんだから必ずコレクションが返る仕様
get_html[0]を確認して
ちょっと質問が雑すぎるから気を付けて 配列なんですか。
まだjavascriptがよくわからなくて
ただ、htmlタグに属性を追加するなど、書き換えたかったのです 先頭の一つだけ欲しい時はdocument.querySelector("html") firefoxで背景を黒くするアドオン、dark readerのようなものを制作しているのですが、どこにcssを指定したら良いものでしょうか
https://mawatari.jp/archives/css-selector-priority#matome
このサイトによると優先順位が最も高いのはimportant指定したものとあります
ということは、インラインにimportant指定すればいいわけですよね
もっとスマートな方法はあるんでしょうか? それってサイトがprefers-color-schemeとか定義してたらちゃんと読み取ってくれんの?
こっちはわざわざデザイナー多く雇って画像から何から全部作ってるのに
何でもかんでも勝手に適当に一律に弄られたら困るんだけど >>309
上のリンクの説明だと、インラインCSSが最も優先されるわけで、その定義を探す必要はあるんでしょうか?優先される側で指定されたものが上書きされると思っていたんですが。 >>311
色に影響する定義って沢山あるし
Paint APIだってある
一律に制御することはできないしして欲しくない >>312
拡張やユーザCSSがauthor declarationsより優先されるのは自明で、それを承知で>>308は改変しようとしてる
問題が起きても責任の所在は308にあるので、気にする必要はないのでは? >>312
サイトごとに違うのでセオリーみたいなものはないってことですね
dark readerがどうやってるのかわかりませんが、一応ほとんどのサイトで機能しますね >>308
横からちょっかい出すのにスマートな方法なんてないよ >>311
誰にレスしてるの?
スレ違いのCSS質問と教えて貰ったんだから、追加質問は控えるべきじゃないの まあ、ユーザCSSで十分な要件だし、わざわざ拡張を作る必要もないよなあ
昔はProxomitronで書き換えてたけど、ブラウザも便利になったもんだ 今はProxomitronではなくFiddlerを使うらしい >>318
Fiddlerに通信内容を書き換える機能があるの?
ただのパケットキャプチャソフトだと思ってた >>319
標準機能としてユーザーエージェントの偽称機能があるぞw
Ruleの一つとして用意されており、カスタムRuleも作れる それを言うならこのスレ民的にはキャプチャやプロキシはNodeを使うでしょ
DOMパーサとかのライブラリも豊富だし >>304
要素の操作は、jQuery が簡単!
初心者に、お勧め そろそろ本腰入れてjQueryを潰す頃か
4,5年かけてFlashを潰すため2chは勿論色んなブログを廻ったあの日のように 本腰を入れるために、まずAppleにjQueryが動かないように頼んではどうかね?
FlashもSafariで動かなくすることで徐々に潰していくことが出来た。
ウェブ標準技術で動くjQueryをどうやって動かなくするのかは知らんが(笑) 動かなくする必要はない。
これは駄目なものなんだというイメージを閲覧者に少しずつ植え付けていけるようネガティブキャンペーンをすればOK githubがjQuery廃止、bootstrapも5から廃止と来たらそろそろラスボスWordPressから廃止来て欲しいね。
Webサイト全体の3割、CMSサイトに限れば6割のシェアを持つコイツがデフォで採用してることがjQueryのシェアを押し上げてる元凶だからね。 1〜9 の整数の乱数が、25個ほしいです。
下の公式を、ラムダ式かメソッドにして、配列に入れてもらえませんか?
var min = 1 ;
var max = 9 ;
var a = Math.floor( Math.random() * (max + 1 - min) ) + min ; let get_random_int = ( min, max ) => {
return Math.floor( Math.random() * (max + 1 - min) ) + min;
};
console.log( get_random_int( 1, 9 ) );
ここまでは出来ました
このメソッドを、任意の回数、例えば、25回呼んで、配列に入れるには、どうすればよいですか?
map を使うのですか? 出来ました。
ただ、乱数が偏っているような気もするが
function get_random_int( ) {
return function( ) {
const min = 1
const max = 9
return Math.floor( Math.random( ) * ( max + 1 - min ) ) + min ;
};
}
const ary = [ ...Array( 25 ) ].map( get_random_int( ) )
console.log( ary );
出力
[ 2, 8, 6, 2, 5, 7, 8, 1, 4, 6, 7, 1, 7, 7, 5, 4, 7, 4, 1, 3, 4, 5, 6, 8, 6 ] 乱数が偏ってるとかいう話題は↓で荒れてるんでここでレスしないように
Ruby 初心者スレッド Part 65
https://mevius.5ch.net/test/read.cgi/tech/1545421414/ >>330
諦めてなかった
https://teratail.com/questions/201689
相変わらず、「styleにimportantを付けたものが最も強い」といってる辺り、分かってなさそう >>334
精度を気にするのならrandom関数は自分で実装した方がいい
var rngstate = crypto.getRandomValues(new Uint32Array(2))
function MathRandom() {
var r0 = (Math.imul(18030, rngstate[0] & 0xFFFF) + (rngstate[0] >>> 16)) | 0
rngstate[0] = r0
var r1 = (Math.imul(36969, rngstate[1] & 0xFFFF) + (rngstate[1] >>> 16)) | 0
rngstate[1] = r1
var x = ((r0 << 16) + (r1 & 0xFFFF)) | 0
return (x < 0 ? (x + 0x100000000) : x) * 2.3283064365386962890625e-10
} >>337
サイコロを6回ふると同じ目がでてきます。偏ってますね。
真の乱数というのは6回サイコロを振ったとき同じ目が出ないもんですよ。 >>338
同じ数字が出てほしくないなら
予め配列を作っておいてそれをシャッフルするとかはどう? > 真の乱数というのは6回サイコロを振ったとき同じ目が出ないもんですよ。
乱数をなんだと思っているんだ? >>340
これだと、乱数どころか規則正しい配列だよなあ
6回振れば、必ず目的の数値が1回出るわけだし 確率で言えば6回サイコロを振れば6割の確率で数字が連続することがある
偏ってないってことが偏ってるんだよ >>338
> 真の乱数というのは6回サイコロを振ったとき同じ目が出ないもんですよ。
12回サイコロを振って、同じ目が2回ずつ出るとする
出た目を順番に並べて、12個の数値を持つ数列とする
数列から適当な場所で「連続した6個の数値」を取得した場合、どこをとっても同じ目が存在しない
この数列がどういう規則性を持つのか、を考えてみるといい >>338
今コインを投げて表が出ました。
もう一度投げて表が出る確率は?
一般人「1/2」
お前(バカ)「次に表が出ると表表となって偏っている!次は裏が出て表裏とならなければ乱数とは言えない!だから次に表が出る確率は0%だ!これが正しい乱数だ!」 乱数の使用目的にもよるでしょ
ゲームとかに用いられる乱数では人間が不平等感を感じないように調整されている >>345
ゲームはそりゃ調整されてることもあるだろうね
何を言いたいのかよくわからないが
>>338がバカだって現実は何も変わらないね >>338がバカって。。。
いつからこのスレはジョークにジョークで返す余裕もなくなったんだろうね
>>339とかはあえて真面目に回答して煽り返してるが >>347
>>338がジョークって…、どの辺が笑いどころ? >>348
2chで大昔からあるバカ煽りでしょ
お前大丈夫?
ここがどこだか分かってるか? >>349
あー、誤情報を書いちゃった時に「ジョーク」といっておけば流せると妄信している人を嘲笑するやつね >>340のアドバイスが豚に真珠
>>338も>>345も「それは乱数じゃない」という事実に気が付いてない、という事に苦笑した
楽しくないジョークをありがとう >>350,351
思い込みの激しいアスペくんには難しいかったね
ここ流のコミュニケーションができないのであれば
yahoo知恵遅れにでも移ればいいよ これからは嘘八百を回答して、散々悩んで貰った後に「ジョーク」と後出しする事にしましょう。
どうぞ笑ってやってください。 正しい回答を嘘と反論するのが5chの楽しみ方だよな
質問者は右往左往して楽しんでくれ 右往左往する奴は最初からお呼びでない
嘘を嘘と分からないやつはお呼びでない 情報弱者に嘘を教えるのがここ流のコミュニケーション
知識に疎い質問者は初めから敗者なのである 当たり前
それが2chであり5ch
情弱を情弱と叩き続けて煽り続けてきたのがこのスレで
それでも食い下がってくる質問者を叩き直してきたのがこのスレ
自ら学ぶ気のない奴は来るな
初心者ですとでも書かれようものなら罵倒を浴びせたのがこのスレ 自ら学ぶ気のある人に嘘を教えて追い出すのがこのスレ 本当に学ぶ気のあるやつは勝手に学ぶ
ここに来るやつはやる気を上げてほしいだけのヘタレか制作依頼者ばかり >>359
> ここに来るやつはやる気を上げてほしいだけのヘタレか制作依頼者ばかり
それは同意 少なくとも10年くらい前はそんなこと無かった
jQueryが広く使われるようになってから変な質問をする人が多くなったと思う requestAnimationFrameを呼ぶタイミングは
コールバックの最初のほうが良いですか?後ろのほうが良いですか? >>362
こういう質問もな
他人の物差しで良し悪しを判断して貰って思考停止したいだけ 脱jQueryとはいうけれどフロントエンドフレームワークも沼だな >>362
同じだから悩まなくていい
ただrequestAnimationFrameかrequestPostAnimationFrameかはしっかり悩まないといけない 自分の考えを述べずに他人にお伺いを立てる奴は総じて自助努力が足りない
このスレの質問者のことだ >>353-354が実践されてるみたいね
これがここ流のジョークか >>368
ありがとうございます
requestPostAnimationFrameは使わなくても良さそうでした >>375
よく分からんが、嘘を書いてもジョークといっておけば、流せるのがここ流のコミュニケーションらしい >>376
何が言いたいのお前
荒らしてるやつが居るから俺も荒らしてやった
どうだ!ってことか? >>377
>>347の思想の持ち主が回答したんじゃね、といっただけ
彼を支持したわけでもなし
文句があるなら、本人にいってやれ >>347に問題が有るなら>>378にも当然問題があるとわからないのか
こういう自覚の無い荒らしはたちが悪い npmでシェルスクリプトだけのパッケージを配布してもOKですか? >>382
なんでだめなんでしょうか?
規約に書いてありますか? npm で、それをインストールしても、
require, import できないから、JavaScript で使えない! *-cli みたいな、node_modules/.bin に置くことを想定したパッケージならあるんじゃね? for ( i=0; i<arr.length i++) {
if (何らかの条件) {
(何らかの処理)
return false?break?
}
(最終的な処理)
}
例えばループ中、i=2のときにifの「何らかの条件」に合致したとして
その場合は「最終的な処理」をさせずにi=3へ移行したいのですが
return false?break?のところは何と書けばよいでしょうか? >>387
あっそれですありがとうございます!
今までifの条件を逆にしてどうにかしてましたが、アーリーリターン的な書き方を覚えたかったので… >>338
サイコロを6回ふったとき同じ目が出ない確率を求めよ(夏休みの宿題) 数学と現実は違う
現実と人の頭の中の世界はもっと違う
数学を使って人間の頭の中の世界と向き合うのがフロントエンドエンジニア
いい加減気が付いたほうが良い カルドセプトサーガ「真の乱数とは奇数と偶数が交互に出る」 document.writeを使わずにインナーテキストを書き換える方法についてお訊ねしたいのですが
要素を取得してからelement.innerTextなどを書き換える以外で同じことをする方法ありますか? textContent
innerHTML
outerHTML JSを使ってアドセンス広告を任意の位置に挿入するスクリプトを書いてるのですが、
Ins.style.display = 'block';
Ins.dataset.adClient = ‘aaaaaaa’;
Ins.dataset.adSlot= ‘111111’;
上記のような値に、レクタングルを全幅表示させる「data-full-width-responsive=‘true’」というパラーメータを追記すると、どのような構文になるのでしょうか…?
Ins.style.display = 'block';
Ins.dataset.adClient = ‘aaaaaaa’;
Ins.dataset.adSlot= ‘111111’;
Ins.dataset.full-width-responsive=‘true’;
と書いてみたところ、動作しませんでした…。
ご教授いただければ幸いです。 連投すみません;
かなり初歩的な質問なのですが、よく「document.writeは使うな」という警告を耳にしますが、あれはなぜなのでしょうか?
window.onloadイベントを記述してもNGなのでしょうか…?
現状、document.writeでスクリプトを読み込んでいるのですが、別の方法に変えたほうが良いのでしょうか? >>393はどこへ?
>>404に名前を変えて再質問してるのか? >>404
使うなというのではなく、初期から実装されてたから今では古いし、他の手段があるからという事
あとDOMを扱う時に不具合が生じるケースがある(どのような場合か知っていれば問題ない)
そのくらいか? 相変わらず、自助努力する気のない丸投げ質問ばがりだな >>406
レンダリングの最適化を妨げるので使うなとされている
使わない事を誓うフィーチャーポリシーすら定義されている JavaScriptコードがレンダリングに必須な場合
どうやって最適化するんだろうか?
遅い回線使ってると時たま見るよね。
ページ読み込んでる途中はレンダリングが崩れていて、
ページ読み込み完了したらやっとまともにレンダリングされるページ
JavaScriptを非同期で読み込むことが目的になってしまって
レンダリングが人間にとって最適化されてない document.writeなんてIE6の頃ですら使わない方がいいって言われてたのになんでいまだに使いたがるんだろうか? document.write を使うと、一旦、すべての要素が消えてから、新しく作られるから! Javascriptがレンダリングに必須なことなんて殆どない >>391
線形合同法を利用してる分際で出しゃばりやがってw appendChilde的なのを期待して使っちゃう初心者は多いだろうね
実際は>>413なんだけど >>410
回線が遅いと言うだけで処理性能やストレージが満足に使えるならやりようはいくらでもある
ブラウザも先読み機能が強化されているしSWでキャッシュ周りもいじれる >>417
最適化っていうのは、単に先読みのことだったの?
ってことは回線が遅いとレンダリングが崩れるよね >>418
>>410で述べられてる最適化はまた別でしょ
同期script及びdocument.writeがどう最適化を阻害するかは
調べたら詳しく出てくるだろうからここで適当に説明することはしないけど 崩れるのが嫌ならロード終わるまで表示させなきゃいいじゃん すごく恥ずかしい質問なのですが
HTMLに点在するscriptタグの変数というのは共有されてるんですか??
ポリフィルとかの変数と自分のスクリプトの変数と名前が同じだとどうなるのかな???と思いました 共有される、但しモジュールならされない
後に実行された方に上書きされる だから一般的なライブラリは変数や関数名が競合しないように(function() {〜})();で囲って
必要最低限だけwindow.〜に代入して外部に公開してる >>423
やっぱりされるんですね
自分のはモジュール???ではないと思うので気をつけます
ありがとうござました >>424
ありがとうございます
入門書を読んだぐらいなので何となくしかわからないですが調べて勉強してみます オブジェクトの中身を、オブジェクト名を指名せずにキー名だけで取得できるようにする方法ないですか?
と質問しようとしましたが
let obj = {'dog': '犬', 'cat': '猫'}
Object.keys(obj).forEach( function (key){
window[ key ] = obj[ key ]
})
console.log(cat)
console.log(dog)
できちゃいましたね…
もし他にいい方法があれば教えていただきたいです >>422の疑問が湧くのももっともなんだよね
どうも解説書にこういった肝心なことが書かれてないことが多すぎる
多くのJavascript入門書に欠けている(重要な)記述
・var等の単語の語源の紹介
・スクリプト同士の変数や関数名は共有されているのかどうかの疑問
・ユーザースクリプトやブラウザ拡張機能のスクリプトは、ブラウザや、見ているページに対して、どのように存在するのか
・イベントリスナーやsetTimeout等に無名関数を登録する時変数の中身を値渡しする方法
・beautifierやLintの存在とそれらをローカルで使うためのエディタやプラグインの紹介
・ブラウザの開発ツールの使い方(特に効果的な使い方のtips)
これらを書かない著者はボンクラだわ 結果として変数が共有されるとも言えるが
もっと素直にグローバルが同じと考えたほうが良い そういや略語の一覧や元になった単語は教えたほうがいいよな
strをずっと攻撃力と思ってたわははは varはvariableで変数なんだなって分かるけどletとかdimとか未だに良く分からない・・・ letはLet's la 前進のLetだし、
dimはディメンジョンのdimだろ letはもともと数学の言い回しだそうな。
Let x be 100 in the following fomula. >varはvariableで変数
それじゃまだ丸暗記の域を出ないでしょ
variという語根に「変わる」という意味があってバラエティとかバリエーションと同じ部品であって
variableは当然-able(可能)がついてるから「変わることができる」という意味だ、まで説明しないと >>434
おお、まさにそういうのを聞きたいんだよ 外から渡されたスクリプトを安全に実行するのにサンドボックスを作ろうとしているんだけど、
WebWorkerってスクリプト本体をstringで渡すことってできないんだっけ?
あるいはeval()でグローバルオブジェクトを任意に指定できたらそれが一番楽なんだが、
なんでできないんだろう。 ?
今のeval()が許されてるのに逆にそれより危険になるって?マウントとりたいにしても雑すぎ。 evalが許されてることがなにか問題あるの?
サンドボックスというのは環境を隔離するものであって
evalの危険性とは全く別物なんだけど
ちなみにevalの危険性とは利用者が、利用者自身を危険にさらすことができるってことな
サーバー側が危険になるわけじゃな無いし、悪意がある人がeval使ってなにかできるわけじゃない。
evalと別のなにかの脆弱性を併用して攻撃することはあるが、
その場合は脆弱性自体が悪いのであってevalそのものは危険なものじゃない。
evalはユーザーがソースコードを書き換えられるのと同じ程度の話 >>439
ずっと議論されてるから、もう2・3年待てばESに入る
意見があるなら今が参加するチャンス >>441
寝てたら>>442が代わりに言ってくれてたわ
もう少し深く考える癖を付けたほうが良いぞ >>439
WebWorkerを文字列から作ることはできる
だけど必ずしも安全とは言えない >evalが許されてることがなにか問題あるの?
evalが許されていること自体が問題だと言ったつもりはないが?
ただ、呼び出し元と同じグローバルオブジェクトにアクセスできるのは安全じゃないから
それを差し替えられたら良いという話。
少なくとも現状より危険になるわけじゃないから>>440は的外れだと言ったまで。 >>422-429
<script>
var a = 1;
</script>
<script>
var a = 2;
</script>
<script>
console.log( a ); // 2
</script> >>428みたいなFAQをスレのテンプレに入れればいいと思う 返信が遅れてすみません;
>>405
その人とは別人ですー
>>406
>>409
なるほど…。よく「document.writeは使うなとあれほど」みたいなこと言われたのでSEOに悪いのかなと…。
レンダリングをブロックするということは、読み込み速度が遅くなったりするのでしょうか?
多用することでSEOに響くのであれば別の方法で代用したいのですが。。
通常、document.write的な動作を行いたい場合、相場としてどのような方法がメジャーなのでしょうか? SEO? あれすべてがデマだけど?
SEOにいいやり方なんて無い。
コンテンツがすべて。HTMLの書き方で差は生まれない。 innnerHTML?というのはメジャーな代用法だそうですが、document.writeで作ったプログラムを全て書き換える場合に中々互換性が確保できず混乱しています…。
変数に文字列を格納→そのまま出力といったシンプルな方法はないのでしょうか。。 無理して書き換えなくてもいいと思うが
documen.writeをそのまま置き換えたいならdocument.body.innerHTML += で良いんじゃね >>450
そう遅くなる。ブラウザにもよるがdocument.writeしたことによる再レンダリングが重かった場合画面が一瞬白くなったりする事があって不格好
>>453
body直に+=するよりはdocument.createElementで適当な要素作ってそれのinnerHTMLに突っ込んでdocument.body.appendChildした方がいい気がする >>451
wordpressでテンプレ変えるだけでも結構差が出るよ
ただ、SEOにゴリゴリ特化して複雑になったものはあまり良くない
シンプルでツボだけちゃんと抑えてる物が流入量多い
アウトラインは作っておいたほうが良い >>427
with構文を使う方法(sloppyモードのみ):
let obj = {dog: '犬', cat: '猫'};
with (obj) {
console.log(cat);
console.log(dog);
} >>450
script要素ノードの弟位置にinsertAdjacentHTMLで挿入すれば良い Chromeで対応しているコーディックかの確認ができません
Firefoxでは実際の対応状況が反映されているようです
どうしたら良いでしょうか
await navigator.mediaCapabilities.decodingInfo({type: 'file', video: {
contentType: 'video/webm; codecs="av1"',
width: 3840,
height: 2160,
bitrate: 20*1024*1024,
framerate: 60,
}}) chromeの場合はcodecs="av01.0.05M.08"のようにきっちり書かないとだめなのよ ありがとうございます。
contentTypeはきっちり反映されるようになりました。
ですがその他の値をべらぼうな値にしてもtrueになってしまうようです。 >>454
ありがとうございます。
とりあえずその方法で置換できないか試してみます。
あとちょっと複雑なことをやっていて、
<div>
<p>りんご</p>
<p>ばなな</p>
<p>みかん</p>
<p>ぶどう</p>
</div>
↑みたいなHTMLを出力し、かつ<p>タグ内の文章をランダムで表示させており、
配列に変換してランダムに吐き出すと言うのを
【くだもの.js】
ver list[
<p>りんご</p>,
<p>ばなな</p>,
<p>みかん</p>,
<p>ぶどう</p>,
]
function Kudamono(){
var N = Math.floor(Math.random() * list.length);
document.write(list[N]);
list.splice(N,4);
}
と言う形でやっているのですが、何か良い代替案があれば教えて頂けるとめちゃ嬉しいです。自分でも試行錯誤します。 よく見たらその人と思われるレスだけid付いてるけどどうやってるの? やったwあたった
>>463
上の人は配列の中を文章だけにしてp=document.createElement('p')でP要素を作って
p.innerTextに配列の文章を入れなさいよってことを言いたかったじゃないの伝わってないみたいだけど
思うにそれHTMLに全部マークアップしといてランダムで隠す方が楽なんじゃないかな
イチイチ生成する意味なくないか >>469
要素を作るまではできたのですが、それを”その場に吐き出す=スクリプトを書いた場所にそのまま出力する”と言うのができないのですよね…。
例えば
<div id kudamono></div>
<scr>kudamono. js</scr>
こう書けばいかようにもなると思うのですが、、
<scr>kudamono. js</scr>
↑これだけで全て出力できるようなメソッドがわからなくて詰んでます…。 insertHTMLでbodyに書き出すと本当にbody直下に書き出しといった形になってしまうので…。
本当に「document.write」と全く同じことができる書き方、現状では無いのでしょうか? >>472
scriptと書いたところ謎の理由で書き込めなかったので、「scr」と略しました。 >>470
なんでよ
document.getElementById('kudamono').appendChild(p)じゃだめなのか >>474
document.getElementById('kudamono')
.appendChild(p)
でやる場合、もともとのHTMLに
<div class=kudamono><./div>
と記述していないとダメですよね?
これは”無から””その場に”書き出すという
document.writeの代用にはならないんですよ…。
なぜなら<scrpt></scrpt>の記述”のみ”で成立しないので…。 まあ、insertBeforeの方が良いとは思うが >>475
あーそういうことか
要素を挿入したい場所の親なり兄弟なりセレクタで指定すれば同じことできるでしょ >>476
ありがとうございます。
insertAdjacentHTMLで親要素を取得して終了タグ直前に挿入、といった形で落ち着きそうです。
nextSiblingでも同じことができそうですが、レンダリング速度など考えるとどちらが良いのでしょうか? >>475
jQuery なら、これで、body に、div.kudamono を作れる。
その後に、document.getElementById('kudamono').appendChild(p) と続ければよい
<script type="text/javascript" src="file:///C:/Users/Owner/Documents/JS/jQuery/jquery-3.1.0.min.js"></script>
<script>
$( 'body' ).append( '<div class=kudamono></div>' );
</script> 修正
kudamono は、id か
>$( 'body' ).append( '<div class=kudamono></div>' );
$( 'body' ).append( '<div id=kudamono></div>' ); >>479
レンダリング速度よりもXSS等のセキュリティリスクを考慮した方が良い
俺なら、insertBeforeか自作のinsertAfterで対応する
必要なら、DocumentFragmentも使う >>480
ありがとうございます。
ただ、やはりそちらのやり方ですとどうしてもbody直下への挿入となるため、<scrpt>kudamono,js</scrpt>を記述した箇所にそのままの書き出しといった形にならないため、やはりdocument.writeの代用にはならないのですよね…。
ただJQueryだとそこまでスッキリした記述ができるんですね!教えて頂いてありがとうございます。 >>482
なるほどです。
insertBeforeで挿入したいのですが、.insertAdjacentHTMLの”beforeend”に該当する記述はinsertBedoreで可能なのでしょうか?
つまり
<div>
・コンテンツ
・コンテンツ
←ここに挿入するやり方がわからない(insertBefore ???)
</div>
←ここに挿入はわかる(insertBefore+nextSbling)or(nsertAdjacentHTML”beforeend”) また新たな疑問なのですが…
innerHTMLやinsertAdjacentHTMLで外部スクリプトを書き出そうとすると、一部正常に動作しないものがあるようなのですが…これは何が原因なのでしょうか?
外部から呼び出す類のスクリプト(アンケートサービスなど)を記述すると、スマホビューで表示されません(PCでは表示される)
そもそもinnerHTMLやinsertAdjacentHTMLではスクリプトを記述することができないのでしょうか? なんども質問してしまい申し訳ありません。。
他に質問ある方などいましたら是非そちらの方を優先されてください>< 質問があります。質問してもいいですか?という質問をしてもいいですか? 「CSSセレクタで指定すれば可能」というレスを
スルーしてるぐらいだからそりゃできないだろな
ちょっとは自分で調べるなりすればいいのに
1から10まで教えてもらえると思うなよ function sengen(name, value) {
?????? //呼び出し元で let name = value する
}
function kidou() {
sengen('aiueo', 999);
}
kidou()
という形で呼ぶと、グローバルでもsengen()関数内でもなくkidou()関数内で
let aiueo = 999;
と変数を宣言してくれるようにする方法って何かないでしょうか?
あくまでkidou()内にはletと書かずに
無理ですかね? スコープやコンテキストに触る必要があるから
唯一with-proxyで全体を囲めば限定的に可能 >>484
>>480-481
にも書いたように、
jQuery では、append で、
指定した要素の最後に、引数で指定した内容を追加できる。
id=box の要素の最後に、div を追加する。
$('#box').append('<div>...</div>');
初心者に、素のJavaScript(JS)は難しいから、jQueryを学ぶ方が早い
例えば、Showroom を見るときに、多くのアバターが邪魔なので削除しているけど、
素のJSでは、要素を削除するのにも、
一々、その親要素を取得して、親から子要素を削除するように書くから、面倒
var elem = document.getElementById( 'js-avatar' );
elem.parentNode.removeChild( elem ); >>485
innerHTML には、HTMLタグを書いて実行できるけど、
innerText には文字列しか書けない
素のJavaScript では、スマホ用ブラウザなどへの互換性が悪い。
新しめのメソッドなどを使うと、スマホには実装されていないなどが起きる
初心者には、互換性が高い、jQuery を勧める
jQueryを使わない場合は、自分で書いたメソッドが、どのブラウザで使えるのか、
一々、互換性を調べなければならないので、何年も掛かる 上の人じゃないんですが、括弧でくるんで
(a = document.createElement(a')).setAttribute('foo','bar')
のような書き方をするのは短く書ける以外に何か利点があるんですか? 普通は、これで良いだろ。
document.createElement( 'a' ).setAttribute( 'foo','bar' )
a = document.createElement( 'a' )
これは、a という変数を、後で使いたいから、一旦、代入するのだろう
だから、下の2行と同じ意味。
a = document.createElement( 'a' )
a.setAttribute( 'foo','bar' )
そして、それ以降で、a を使う >>479
> insertAdjacentHTMLの”beforeend”に該当する記述は
appendChild >>485
DOM API全てで外部スクリプトを書いたscript要素を挿入出来る
実行順の問題か、コードがSPに対応していないか、ノードが出現する前に参照しようとしているか、script[tyoe=defer],async,moduleを使用しているか…etc ぶっちゃけ、>>493が最重要
「やりたいこと」だけ先行すると、「やりたいこと」が不適切な手段だった場合に気がつけない
「最終目標」を踏まえて、最適解を見つける必要がある
最終目標は「document.writeの代替コードが欲しい」ではなくて、
- なぜdocument.writeが必要なのか
- document.writeではなく、代替コードである必然性はあるのか
- document.writeをなぜ使用してはいけないのか
このように、「なぜその手段を選択したのか」を尋ねられたら時に「論理的な理由」を説明出来るようになって、良いコードを書けるようになる >>494
>>495
ありがとうございます。JQuery楽そうなんで換装できるよう勉強してみます
>>499
色々試した結果、その箇所だけ新たにノードを生成して個別に挿入したら正常に動作しました。実行順序の問題か、もしくは使用しているブログサービス特有の問題みたいです。ありがとうございます。 >>501
そうですよね…。
一応コード全体の書き換えは終わり、実装もできそうなのですが…。
書いているブログの記事下に、過去のおすすめ記事や人気商品などをランダムで表示させるスクリプトを書いていて、記事下に<scrpt>randam.js</scrpt>と書いて一括管理しています。
ブログサービスを利用しているのでphpも使えず、jsを使うしかないというね。
- なぜdocument.writeが必要なのか
過去の記事は別のファイル(kiji.js)で管理したいので、それをjs内で呼び出して使うのにdocument.writeが便利→多用してしまうという感じです。
あと単純に「その場に書く」ということができるので便利。。(ブログサービスの都合上、cssのクラス名がpc-スマホ上で違ったりするので、クラスを指定して挿入よりその場に書き出せる方が便利)
- document.writeではなく、代替コードである必然性はあるのか
これはむしろ私が最初に疑問に思ったので質問した次第です。
使っていて特に表示速度に問題もなく、ページが真っ白になるという事もないのですが、「document.writeは非推奨」という話を何回も目にしたので、変えたほうが良いのかなと…。 だから変えた方が良いって皆言ってるじゃない
これ以上は君が調べて自ら解決するべきことだよ
それで話は終わりなの ほんとしつこいね
変えなくてもいいって言ってほしいだけなんでしょ >>503
document.writeはHTML5の仕様で非推奨なはずで、だからみんな非推奨と言ってるので
使えないわけではないから、使いたければ使ってもいいんだろうけど
ただ、質問されたら、非推奨だから別の方法でって答えしか返せないのは当然だと思う 自分の言ってる事が正しいと思うなら回答を気にせずに好きに実装していいんだぞ
死ぬ程大変な思いをすることになるけど、趣味でやる分にはとてもいい勉強になる
俺はなった、ありゃーやるべきだ
>>404は好きにやってしまえば良い すみません;
質問し直します
「document.writeは使うな」という警告を耳にしますが、私は誰がなんと言おうとも頑として聞かずdocument.write使いたいので、免罪符となる「document.writeを使っても問題ない理由」をでっち上げていただけないでしょうか? >>507
例えばstyleタグを生成する場合。
document.writeを使わないなら、DOMが構築された後に呼ばれるので
わずかに構築済みのDOM(ただしスタイルがあたってない)ものが表示されてしまう
レンダリングがブロックされてしまうというが、そもそもstyleタグを生成する場合
レンダリングをブロックしたいわけでdocument.writeを使うのは願ったり叶ったり 1.物理・数学の知識をjavascriptで活かすには何が一番有利?
2.ブラウザゲームが作りたい。専門書が多く出版されている物理エンジンはどれでしょうか? 物理・数学の知識を活かすって何が言いたいのか良くわからんな
ゲーム用の物理エンジンというのも必ずしも物理学的に忠実なものではなくて
性能的、面白さを出すために擬似的なものを使うのが主流だし 自分が勝てるホームを探してるんだろw
物理・数学の知識がある(自称)のに
自分が何も作れないのは題材が悪いんだって考えてる。 数学や物理だとpythonの方が向いてるよ
物理エンジンでどうこうしたいならc#+unityだけど、別に数学の知識は不要。パラメータ変更するだけで大抵のことは出来る >>504
すみません、先述の「document.writeは使わない方が良いのか?」に関する疑問はすでに解決済みです
>>503は>>501さんの
なぜdocument.writeが必要なのか
なぜそれを使用してはいけないのか?
に対する回答を明確にせよ
という意見に回答しただけですので、
決して今「document.writeをどうしても使いたい!どうして使っちゃいけないの?」みたいなことを思っているわけではないです…。 >>505
document.writeはどうして使っちゃいけないの?
→非推奨だから
で、もう既に私の疑問は解決済みです。
誤解を招くような書き方をしてすみませんでした。。
あと>>507さんは私とは別の人ですので悪しからず…。 よく見たら既に使われているので支障があれば変えたいって質問内容だったのね
当然誰も読まないから>>507みたいにおもちゃにされとるだけ 非推奨なのはパフォーマンス上の理由だから、パフォーマンス出なくて構わないならどんどん使っていけ。 >>522
flashが全滅したのをもうお忘れで? flashはそもそもweb標準じゃないがw
仕様書に名前すら出てこないがwww
単なるサードパーティーのプラグインでセキュリティチョンボ大杉のうんこなので閉め出されたゴミだがwwwww さすがにflashが終わったからdocument.write終わるってのは頭おかしい。
風が吹いたからヤったとかいうのと同じレベルで意味不明。 >>524
全面的に同意
ただ何故か日本では大流行で、標準機能をはるかに越えた単価だった
>>525
いや、それと同等の事が起きるって話しだよ
appleがslash締め出したように、ブラウザがdocument.writeを使えなくするのは時間の問題
標準はあまり関係ない
なぜなら標準はブラウザの実装を元に作られるから さすがに、standardから削る前に実装を廃止しちゃう早漏なブラウザメーカーはないだろう Flashは存在を許すことで明確で積極的な害があったが
document.writeに関しては同期XHRと同じく非推奨以上にする積極的な理由がないでしょう
それに昔と違って今はFeature-Policyがあるんだからパフォーマンスの問題だって
Feature-Policy: {"disable":["sync-xhr","docwrite"]}
とか指定されているサイトでのみで最適化していけばいいという流れでしょ >>528
消える?
むしろ仕様に乗せる案がようやくStage3まで来たところだけど >>526
> ブラウザがdocument.writeを使えなくするのは時間の問題
時間の問題w
そこまで言うなら根拠だしてどうぞ。
どこでそんな話が進んでいますか?
ハヤク! >>532
> ブラウザがdocument.writeを使えなくするのは時間の問題
ブラウザがdocument.writeを使えなくする根拠マダー?ww
おかしいなぁwwまだ使えるんだけど?www
あくしろよ嘘吐きノロマwwwww いまだにブラウザデフォがsloppyモードでwith文も使えるブラウザがdocument.write消す分けねーだろwebが壊れるわ まぁ別に100%廃止される予定だから今すぐやめろなんて言ってないぜ
phpのmysqlも10年ぐらい掛けてじっくり廃止したが、それでもやぱり大混乱が起きた。弊社です。
非推奨の機能なんて1005使わない方が良い。
単にバージョンアップが無いだけでなく、その機能はいずれ使用できなくなる。
一ヶ月しか使わないランペならともかく、ずっと使うつもりなら絶対に使うべきではない >>533-534
反論は出来ないよ
ただ、非推奨の機能なんて当然将来削除予定に上がるんだから初心者に勧めるなってだけの話しだ 正しい→非推奨だから使わない方がいい
嘘松→非推奨だから削除される ちょっと訂正、>>535は
>phpのmysqlも
>phpのmysql系の関数も
だ
>>534
俺もそう思ってたけどmysql系の関数がなくなってphp5以前の半分ぐらいかな、死滅した。
俺はいくつかのwebサイトを復旧中なんだ
日本全体では相当に多いと思う。この事実は否定できない
もちろん急ぐところは特急料金もらってる。超バブルだ。 >>537
非推奨のままずっと存在した機能って何かあるの?
それと削除された機能の割合があれば教えて欲しい。体感では100%全部無くなっている。 >>538
rubyやらphpやらから来た人にありがちな勘違いなんだけどjsはそれら言語と違って「仕様変更して前のはメジャーバージョンアップのとき消せばいいや」ってのが通じない言語なんだよね。
「webを壊す」とか「don't break the web」とかで検索して学んでよそこら辺の概念は。
同じように考えてたら笑われるよ。 >>539
嘘乙。
セキュリティなどのやむにやまれぬ事情やベンダー固有機能とかでない限り非推奨機能でも基本残ってて使えるわ。
100%とか笑わせるなよw >>541
事情なんてしらねーよ
無くなったものはなくなっただけだ むしろ消えた機能出した方が早いだろ。すぐ出せるだろ100%らしいし >>536
誰も勧めてなんかないでしょ
というか10年後使えなくなるかもしれないから今から気をつけるって
10年前Chromeが出てから、色んな機能がユーザーアクションが必要になったり、
プレフィックス付きが無効化されたり、WebComponent周りも大きく変わったけど
それらを10年前に予測することはできないでしょ
自分が勝手に気をつけるのなら良いけれど、
今実際に決まってることとしたらFeature-Policyで抑制して行こうということなのに
勝手に使えなくなるとかいう予想を押し付けるのはおかしいと思う
Webっていうのは記録でも有るんだから昔の物がそのまま見えないと行けない
writeなんかはコンテンツの内容表示に直接影響する機能なんだから
よほどの理由がない限り廃止することはできないと考えるのが普通
TLSやHTTPの将来の一定バージョン以降ではいくつかの機能を廃止するとかはできるだろうけどね >>543
知るかwww
社内のミスならともかく、言語の仕様変更なんて共有して終わりだよ
ただ一番大きかったのはundefined
この辺りの仕様がなんか変わってえらい目にあったのは覚えてる >>544
あの〜それそのままmysql*関数に言って頂いてよろしいですかね〜 他の言語のように仕様変更してなかったことにできるならtypeof null → objectの仕様バグがいまだに残ってるわけないわな。
web技術の宿命や事情も知らないくせに門外漢が知った風な口聞かないでほしい。 いいからdon't break the web で検索しろカス
mysqlやらphpと同列に語るとはヘソが茶を沸かすわ >>547
もうさすがに無理があったのでFWに投げた
>>548
思想とかしらねーよwww
結局実装すっるのはブラウザなんだから全く信用できない どういう標準作るかはどうでもいんだ
それをどう実装するかがブラウザにかかっている
全企業全部統一なら分かるけど、何故か例外をだす企業がいる
それだけの話しだ >>550
それがWebだから
そうじゃないプロプラエティな技術も沢山あるのだから
嫌ならそちらでやればいい
悪いところを無くすことは絶対にできない
良いところがあればその分悪いところがあるのだから
あとはどれを選ぶかは好みの問題 そもそもWeb技術のうちどれをどれだけ採用して
どれだけ独自機能を乗せるかはブラウザの自由でしょ
ブラウザってただの1アプリなんだから >>551
webは使わざるを得ない状況になっている
使わなければ良い、はもう通じない
あとは言語の開発に参加するぐらいだ
なので俺はphpのデバッガに参加したところ。バグフィックスをバンバン出している
選ぶじゃない、作るんだよ
jsはまだ開発に参加してないけど、そろそろ行こうかなって思っている >>553
言語の開発に参加した所で君が思ってるところは変わらないでしょ
TC39でJSエンジンもWebブラウザも作ってWebを乗っ取るってこと?
それはできないし通用しないと思うよ
それにね、技術の上に理念が乗っかってできてるものの
理念を否定することはその存在そのものの消滅を意味するでしょ
WebはWebだから支持されてるんじゃない
Webの理念が受けたから今の大きなWebがあるんだから
Webって実質まだ20年くらいのもの
Webの理念を否定して仮にWebを変えられたとしても
別の存在が数年の間に取って代わるようになるだけでしょ
つまるところWebは細かい部分を変えるしか無いの
理念の部分を変えようなど机上の空論でしかないの >>554
どれだけ論破していただいても構わないんだけど、
Document.write()
が消えるか消えないか、これだけの話し
これで言えば俺は消えると思う
evaklに近いこれをどれだけ受け入れるか?
まぁそれだけの話しだな >>555
受け入れるという人はいない
それと将来まで使える形で残しておくかは別の話
document.writeはFeature-Policyで制限されたり
HTTPのバージョンで制限されることは十二分に考えられるけど
基本的には10年後も使える形で残ってるよ
自称JS仙人の俺が保証する >>530
まだ記号系のRegExp.$って使えんの? そりゃ互換性が一番重要だから廃止するわけがないだろう >>555
残念evalも消えてません。
なーんにもお前の思う通りにならないねww
バーカwww >>560
まだ使えると書いた
今まで使えてきた環境では使え無くなったりする流れではなく使えるということ
まだ正式仕様にはなっていないので現時点でモダンブラウザ間で互換性が取れているわけではない 上で言ってるのは廃止された時、何も準備してない奴が阿鼻叫喚になるだけだな
俺は順次書き換えているからなんでもいいぞ 「document.writeが非推奨」を記述している仕様書はあるの?
自分も使わないけど、あくまで機能的な面で使わないだけで、「非推奨だから使わない」は全く分からない おはようございます!
データを取りに行って、なかったときundefinedエラーになるので
try/catchでしのいでいる部分があるのですが
例えば、要素がなかったときのquerySelectorAll().length的な
別のテクニックって何かありますでしょうか?
void 0とかtypeofで比較する方法はだめでした >>565
HTML Standatdに書いてある
でも「記述している仕様書はあるのか」という判断基準は危険だよ
昨今ChromeチームがGitHubとかで公開したアイディアをWeb標準と言って自分に実装することが問題視されているけど
そのように仕様書なんて誰でも作れるもので超有名な仕様書だって大抵エディタは数人しか居ないのだから
非推奨と書いてあったってそのはそれを書いた人が非推奨と書いただけでしかなく、
仕様書がそれが法律というわけでもないし、推奨しないという言葉に明確な定義も効果も定められて居ないのだから
結局Webって皆で作るものだから、皆がどう思っていてどうしていきたいのかが重要
勿論皆と言っても自分の意見を出す人が少数居て、その中で特に引っ張っている人が少数という構図だから
基本的にはリーダーの発言発表をチェックして色んなメーリングリストに参加して雰囲気を掴んで
一緒に流れを作っていくという気概を持っておかないとね もし外部に判断基準を求めるのなら >>567
どこに「非推奨(NOT RECOMENDED)」と書いてあるの?
https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#document.write()
https://momdo.github.io/html/dynamic-markup-insertion.html#document.write()
そもそも、HTML仕様における「非推奨」は HTML 4.01 まで存在したけど、HTML Standard以降はなかったと思うんだけどな…
> 非推奨と書いてあったってそのはそれを書いた人が非推奨と書いただけでしかなく、
それは「非推奨」を仕様で定義せず、各々の主観で物申してる場合の話だよね
Web標準仕様では通例的に RFC 2119 が参照される事が多いし、それに留まらず、通常は「非推奨の理由」にも仕様は言及する
重要なのは仕様における「非推奨の定義」「非推奨の理由」を正確に把握する事だよ 仕様で「非推奨」が未定義なら、彼らのいう「document.writeは非推奨」が主観的根拠を基にするもので厳格な定義じゃない
彼らの意見を目にして>>503が
> 「document.writeは非推奨」という話を何回も目にしたので、変えたほうが良いのかなと…。
のように判断するのは、ただの思考停止だよ 参考までに、HTML 4.01 の非推奨は下記URLの「推奨しない」の部分
http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/conform.html#h-4.1
HTML Standard には(自分の知る範囲では)非推奨はないけど、近いのは 15.
https://momdo.github.io/html/obsolete.html#obsolete >>568
そこに書いてあるじゃない
For all these reasons, use of this method is strongly discouraged って
でも比較的大人数が長時間議論して練ってバージョンを区切って出していた時代とは違うのだから
非推奨の定義や理由だって結局少数のエディタの主観的根拠に基づくものでしか無い
今回だって警告の元はここ
https://www.w3.org/Bugs/Public/show_bug.cgi?id=9767#c32
document.write() behaviour is so crazy at this point that I've added a warning discouraging authors from using it.
あのHTML仕様界の王様、最も影響力のある人物であるHixieが「振る舞いがクレイジーだから警告しとこ」という理由で追加したものが10年も残ってる
元々はただwriteで書き込まれたスクリプトを動的に実行すべきかどうかという話でしかないのに、Hixieが主観的根拠というか気分で入れたものでしかない
仕様って言うのは結局そういうものでしか無い >>571
繰り返すが、「非推奨」と書いてない
それでも「書いてある」と主張するなら、「仕様書の警告文から判断して、非推奨だと俺は思う」と主張するのが正しい
あなたの個人的見解を聞いているのではない
仕様書は書いた通りに読むだけで主観的解釈を交えた曲解はよろしくない >>572
警告文も仕様の一部で強く推奨しないと書いてあるのだから
それを書かれたとおりに読めばこのメソッドは非推奨なんだと言うことになるだろう
君は何?項目にNOT RECOMENDEDマークが付いてたりしないと非推奨と思わないの?
それこそ君の仕様に書いてあることに対する主観的解釈、個人的見解だと思うけど
Webに関する議論全般において通例的にRFC2119が参照されると思うのもただの君の古い考えだし
その範囲でしか非推奨という日本語訳を使えないというのも君のあまりにも頭の硬すぎる独自の考えでしょ
RFC2119のNOT RECOMENDEDはにしたって
具体的にそれを持ってこの機能が将来どうなるかとか、効果を表すものではなく
ただその仕様に従って欲しい度合いの強さを表すものでしか無い
もし仕様書に警告という形でその仕様に対するより詳しい事項がわざわざ書いてあるのに
キーワード1つ書くやり方に従っていないのであれば正式なものではないというような解釈をするのは
あまりに身勝手で意味のない考えだとしか言えないね >>566
なんのデータを取りに行くのか知らないが
普通にnullやundefinedと比較したら良いんじゃねーの? >>574
> 警告文も仕様の一部で強く推奨しないと書いてあるのだから
どの文面? 俺も「強く推奨しない」とは読めなかったわ
どこだろ? For all these reasons, use of this method is strongly discouraged.
じゃないの >>578
is strongly discouraged がそれか 要所要所で使い分ければ良いだけなのに、document.write非推奨厨は最近DOMを覚えたオレすげーなのか?
Googleアナリティクスだって少し前まではdocument.write使ってたし…
でもGoogle(Chrome)を基準にWeb標準がコロコロ替えられるのは確かに迷惑 >>575
最後にちょっと書いてますがfalsyな値と比較する方法ではだめでした >>581
どうやって取得してるかまず書けよ
fetchやajax系ならstatus見ろとか助言できるだろボケ obj.prop をチェックしようとして obj 自体が null とかいうパターンだったりして 「仕様書にはこう書いてある!(`・ω・´)キリッ」
「独自解釈乙論破!」
みたいな流れは
夏だなぁ >>580
よく見返してご覧よ
変えたほうが良いかと質問者が質問してるから
変えたほうが良いけど好きにすればという声が多数でしょ
非推奨だから死んでも使うなと言ってるやつ居るか?
被害妄想は大概にしようよ >>537で終わってる
非推奨であろうがなかろうが使えなくはならない 自分のメモ帳を見返してみたら
Title:javascript アロー関数
(a,b)=>a+b,[]
//第2引数も指定できる
という謎メモを発見しましたがさっぱりです
どういうことなのか解読してみてください 解読する恩恵が欠片もない
今アロー関数のことが分かっていれば良い
無駄なことにエネルギーと時間をを使うな 無駄コードをよく見るなら、環境を変えた方がいいかもね 無駄?
アロー関数とカンマ演算子の関係、もしくはカンマで区切られて式として評価される区内においての挙動って
重要なポイントであり、テクニックというかコーディングスキルとして大切だと思うが >>592
>>587はカンマ演算子によって、評価値は []
アロー関数をどうやって参照して呼び出すの? >>587はおそらくArray.prototype.reduceに関するメモ。
ただし例がよくない。
最初は
[1, 2, 3].reduce((a, b) => a + b)
//=> 6
とでもやっていたのだろう。
reduceが第一引数のコールバック関数に加えて第二引数として初期値も与えられると知ってメモしたのだろうが、その際コード例を上のままにしてしまった、と。
コード例としては
[1, 2, 3].reduce((a, b) => a + b, [])
だと何がしたいのかワケワカメだからな。
なお当たり前だがこの引数リストのカンマはカンマ演算子ではない。
>>592はマヌケ。 >>594
カンマ演算子だけの話なんてしてなく
お前が言ってることも含んでるんだが
お前こそマヌケか? >>587は、
[1, 2, 3].reduce((a, b) => a + b, 10000) //=> 10006
とでもメモしとけばこんなことにはならなかった。
さらに言うと面倒でも
[1, 2, 3].reduce((acc, n) => acc + n, 10000)
のようにアキュムレータと値が弁別できるように書いた方がよい。
aとbじゃパッと見まるで同格みたいじゃん。 >>596
>>587がカンマ演算子だとして、有効なコード例を見せてくれ >>593,598
何が言いたいのかようやく分かった
だけどそれこそが言いたいこと
(a, b) => a + b, []
が評価されて
(a, b) => a + (b, [])
になるか
((a, b) => a + b), []
になるかという話 ドツボだね
バカ丸出し
下になるのは当然で、その上でカンマ前のアロー関数に意味はあるの?あるというなら有効なコード書いてみろと言ってる >>600
いくらでもあるでしょ
if(f = (a, b) => a + b, f() )
みたいなケースとか
前者になるか校舎になるか知っておかないといけないでしょ >>602
言いたいことは分かるが>>592を見てもらえれば分かるが
俺はより一般的な形において話していたつもりだ
一方君の言いたいことは分かるから不毛な言い争いになる前にこれでもう終わりにしよう 君らはいちいち煽りと喧嘩という名の議論()をしないとまともなコミュニケーションにならないの?
まぁこのスレに限った話ではないけど
有益な内容なんだろうけど読んでてすげー疲れるわ >>601
>>587の ,[] はどこへ行ったのだ? 品行方正になれとまでは思わないけど指摘がお互いにすれ違っていたりして微妙
議論するなら変に端折ったりせずにまともな文章をお互いに書け
出来ないなら仲良し同士でツイッターでもやってろ 元々の発端は>>592
>>598が「カンマ演算子が有効なコード」を求めたが、>>587と関わりのないコードが出てきた >>607
なんで,[]に拘る必要がある?
元の質問者の質問答えるわけでもないのに
アロー関数とカンマ演算子の一般的な関係について言ってるんだが
>>609 >>601 >>611
つまり、誰も質問していない「カンマ演算子の遣い方」を唐突に書きだしたという事か >>612
君は脳内メモリが1kbくらいしかないのか?
>>592で今までの流れからくる話としてカンマで区切られて式として評価される区内との場合と、
それに付け加えてついでにカンマつながりでカンマ演算子の場合も書いただけなのに
何故かカンマ演算子の部分だけを切り取って>>587と無理矢理絡めて話そうとする
頓珍漢なレスが>>593で付いたことがややこしくなった原因でしょ
どんだけ視野が狭くて自分勝手だったらそういう考え方ができるんだか >>592が>>587がカンマ演算子じゃない事に気が付けなかっただけでしょ >>614
>>587だけで評価したら取り上げたらカンマ演算子でしょ
ただしコメントの内容からするか関数呼び出し式中のカンマでしょ
だからわざわざ両方に触れて書いてるんでしょ >>615
> ただしコメントの内容からするか関数呼び出し式中のカンマでしょ
だから、「無駄コード」といわれたのに、>>592が無駄じゃない云々でカンマ演算子をとりあげる頓珍漢なレスをしてるんでしょ >>589,591は「カンマ演算子が無駄」と考えていて、>>592が「カンマ演算子を含めて、無駄じゃない」と反論しているのが争点
「カンマ演算子だと、どう考えても、おかしいでしょ」に対して「カンマ演算子にはこんな便利な使い方がある」とか「なぜ、カンマ演算子に拘る?」とか、主題(>>587)から逸れた切り返しをしていて、噛み合ってない
>>592が反論するには、「>>587でもカンマ演算子でこんなコードが書ける」と返して、>>592でカンマ演算子を取り上げるべきの正当性を主張する必要がある >>594のエスパーが正しいならそもそも>>587のカンマは単なる引数リストのカンマであってカンマ演算子ではない。 >>617,618
済まないが俺としたら只々なんでそこに執拗に突っ込まれるのかが理解できない
俺が何を取り上げようが俺の勝手でしょ
俺は経緯も一通り説明したのにまだ同じ突っ込みを繰り返す理由が分からん
一体どうなったら満足なんだ? 勘違いしましたごめんなさいって一言言えば良いんじゃね その言い草だと、>>592に対しても「何を拘ってるんだ?」で終わるわけで、自分に甘く、他人に厳しい人だな >>620
実際に勘違いしていないので謝りたくはないところだが
今回は別に自分の主張も引っ張る価値もないどうでもいいものなので
君が謝って欲しいということであればそちらを取る
勘違いしましたごめんなさい あやまれって…
どっかの国のデモみたいだなレベルヒクッ 彼が長いこと引っ張るもんだから、カンマ演算子で使えるコードがあるのかと悩んでしまった
態度が大きいのがデフォなだけで、根拠があるわけではなかったみたいだな、やれやれ 自分の非を認めずどっかの国みたいに騒ぐから突っ込まれてたんだろ どっかの国みたいに謝罪と賠償を請求して騒いでるようにしか見えない 謝罪しろ。金を出せと言ってるんじゃない。
まあ、金だすっていうなら受け取るけど、
金で解決はできない。謝罪しろ。
何度、金を出しても言い続ける。次の金はまだか? 謝罪など要らん
正しい内容だけを書け
間違えたら、訂正しろ
言い訳がましい理屈を並べ立てるのが突っ込まれる原因 他人を否定する時には>>592のような偉そうな態度をとるが、自分が否定された時には話題を逸らして躱す、スタンスの切替が非難されてる
能動/受動共にスタンスを統一するというのは大事な事だよ >>628は当然の主張だと思うけど、他から見ると、ただの「偉そうな人」に見えるのかな
- >>587で「カンマ演算子を使った有効なコード」があるなら、それを書く
- >>587で「カンマ演算子を使った有効なコード」がないなら、「>>587はカンマ演算子ではありません。>>592は間違いでした。混乱させてごめんなさい。」と書く
事実確認を軽視して、「言葉だけの謝罪」をしているから「謝罪など要らん」といわれるんでしょ
事実確認せずにgdgdとお茶を濁しているから、>>624みたいな被害者が出てきて、ただの時間泥棒と化してる >>630
もう分かったから
俺が悪かったから勘弁して >>631
なんだこいつ
お前のなんとか心を満たすための下らねぇ謝罪要求と、自分の正当性を延々と書き込んでたお陰で無駄にスレが消費されるわ肝心の技術的な話題が一切出てこなくなった
気分が悪いし迷惑だから俺に謝罪しろ!ここにいる全員にあやまれ! ネタには勘違いをなんとか言い訳しようとする必死さがない 真面目に回答や反論すると、「何必死になってんの?」と煽られる程度には民度が低い マウンターでない奴をマウンター扱いする荒らしもいるから、質が悪い Array#indexOfとArray#findIndexについて
配列からオブジェクト自身を検索するとき、どっちがいいですか?
[obj1,obj2,obj3].indexOf(obj2)
[obj1,obj2,obj3.findIndex(obj=>obj===obj2) ミスりました
[obj1,obj2,obj3].findIndex(obj=>obj===obj2) >>645
ありがとうございます!
findIndexのほうが冗長で遅いと思ってたので
このコードを見かけて、実は挙動が違うのかなと思いまして
ありがとうございました 入れ子的な非同期通信をやりたいのですが
https://i.imgur.com/K0qlToO.jpg
こういう感じの処理をしてみたいのですが苦戦しています
(右側のthen(hoge())毎に複数$.getし、かつhoge内もthen(hoge())も順番を守る、みたいな)
↓こういう単純なやつだと上手く言ってくれるのですが
function hoge(){
return $.ajax({url:'https://jquery.com',type:'GET'}).then(_=>console.log(1)).then(_=>console.log(2))
}
$.ajax({url:'https://jquery.com',type:'GET'}).then(hoge()).then(hoge())
入れ子になると
function hoge(){
return $.ajax({url:'https://jquery.com',type:'GET'})
.then(function(){
return $.when($.ajax({url:'https://jquery.com',type:'GET'}).done(_=>console.log('$get 1-1')),$.ajax({url:'https://jquery.com',type:'GET'}).done(_=>console.log('$get 1-2')))
})
.then(_=>console.log('$get 2'))
}
Promise.all([hoge(),hoge()]);
上手くいったり行かなかったりします(おそらく通信速度の影響?)
なので最初の単純な方も上手くいってるのかどうかすら怪しいです
何かテンプレみたいなものがあればおねがいします >>647
> (右側のthen(hoge())毎に複数$.getし、かつhoge内もthen(hoge())も順番を守る、みたいな)
これってもはや同期的に処理するのとなにも違わないのでは…… Promise.allとか$.whenとか使うと順番通りにならねえんじゃね? example.com みたいなサイトを使えば?
jquery.com は、テスト用のサイトじゃないだろ
タイムアウト時間も、関係あるかも
今は非同期処理に、axios を使うのが普通 >>648
説明不足でした
複数の$.getのとこは順序にこだわりなく全部終了するまでは待って欲しい程度でした
>>649
今はLOADINGみたいな変数をsetIntervalで監視してやってるのですが
何かもっとクールな方法がないものかと・・
>>650
たしかに、別のサイトでjquery読み込んでテストしてみます
axios初めて耳にしました調べてみます >>652
いやだから右側の処理をしたいんだろ?
hoge終わったら次のhogeが実行してほしいんだろ?
Promise.allは全部同時に実行されるんだから使わずに
同じような引数で右の処理を行ってくれるような関数を実装しろよ >>647
色々言いたいことあるけど最初の例で
〜then(hoge()) ←hogeを即時実行しちゃって大丈夫なの?
それともこれがjQuery wayなのか知らんけど jQuery関係なく、JavaScriptのPromiseっていうのは
こういうもんだ その"こういう"が何かを書けっつー話
自分がわかってるつもりで書いても何も伝わらねーの >>656
JavaScriptのPromiseを勉強してからもう一回来てくれる? >>658
はい勉強しました。
これで問題解決でいいですよね どっちが解決したのか分からんが、>>654が解決したなら、良かったな どっちにしろ普通の頭持ってりゃここまでのレスで解決するだろ 説明もできずに「解決したんだから結果オーライ」みたいなバカしかいないの? そもそも答えが書ける人間は「こういう」なんて書かないしな ajaxでtimeoutはあるのですがfilesizeで何バイトダウンロードしたら通信切るやり方教えてください もっと論理的に、正確に書いてくれ!
処理A が成功したら、処理B を行うとか
プログラマーなんだから、yes/no と、順番を明確に書いてくれ! >>669
XMLHttpRequestオブジェのprogressイベントを監視しろ [1,21,33,46,58,64]みたいな配列があって、それぞれが1=りんご,21=スイカ,33=みかん,46=ぶどうみたいになっているんだけど、
配列内の数値が30以上50以下の時にだけ_で繋げて、みかん_ぶどうみたいに出力するのってどうすれば良いですか? > 俺だったらreduce使うかな
は、
俺だったらfor文使うかな
と言ってるのと同じで、なにも役に立つことを言ってない >>673
すまんがまず仕様を明確に示してくれないと何も答えられん
・数字↔果物の対応関係と文字列のデータは何処にどう置いてあるのか
・_で繋げるのは分かったのでみかんとぶどうは何処から来たのか
・配列は必ず昇順なのか reduceは無いわ
filter map joinだろ Ruby で作った
require 'csv'
str = <<"EOT"
id,fruit
1,りんご
21,スイカ
33,みかん
46,ぶどう
55,なし
EOT
options = { :headers => true }
# 2次元配列
ary = CSV.parse( str, options ).each_with_object( [ ] ) { | row, ary |
ary.push [ row[ 'id' ].to_i, row[ 'fruit' ] ]
}
ary_2 = ary.select { |ary| 30 <= ary[ 0 ] && ary[ 0 ] <= 50 }
.map { |ary| ary[ 1 ] } # フルーツ名
p res = ary_2.join( "_" ) #=> "みかん_ぶどう" javascript初心者なのですが、よろしくお願いいたします。
【環境】windows10 1809、Chrome(Vivaldi)
【何をしたのか】
月イチで使う、web上の申込フォームがあります。
毎月同じような内容を入力→申込を繰り返すのですが、
その入力をブックマークレットで半自動化しようと思っています。
今回詰まっているのは、textの欄にクリップボードの文字列を貼り付けする処理の記述についてです。
【期待する結果】クリップボードの文字列を、目的の欄に貼り付けしたい。
【サンプルコード】
let chk = document.getElementsByTagName('input');
for (let i = 0; i < chk.length; i++) {
if (chk[i].type=='text'
&& chk[i].title=='利用者番号'){
chk[i].value = //クリップボードの値// ←ここの記述がわからないです
}
if (chk[i].type=='submit'
&& chk[i].value=='申込'){
chk[i].click();
}
} >>682
クリップボード chrome javascript ペーストで検索したら答えに行き着くんじゃね?
検索した上で出来なかったのなら【何をしたいのか】ではなく【何をしたのか】を書けよ await navigator.clipboard.readText() >>682
>>684でいいけど
クリップボードの読み取りはclickやkeydown等のユーザーアクションによるイベントからでないと動かないのでボタン等をページに挿入してやる必要がある
さらにブラウザのサイト設定で明示的にクリップボードを許可しておく Ruby では、powershell, clip コマンドも呼べる
# クリップボード内の複数行文字列の、各行の先頭・末尾から、
# 連続する空白類を除去して、クリップボードに入れる
str = `powershell Get-Clipboard`
str.encode! Encoding::UTF_8, Encoding::CP932 # UTF_8 へ変換
ary = str.each_line.map( &:strip ) # 連続する空白類を除去する
IO.popen( 'clip', 'w:cp932' ) do | clip | # CP932 へ戻す
clip.print( ary.join "\n" )
end 何でもreadLineとかストリーム的に読むのって古臭いと言うか不便というか気持ち悪くないのかな 別に絶対的に悪いということを言うつもりはないけど
Perlを引きずってるのがよく分かるね var tostr = {1:"りんご",21:"スイカ",33:"みかん",46:"ぶどう"};
var res = [1,21,33,46,58,64]
.filter(val => val >= 30 && val <=50)
.map(val => tostr[val])
.join("_");
たったこれだけのことをするのに>>681みたいに書かなきゃいけない言語ってやばない? とても初歩的な質問なんだが
Makefileを作成して(内容はwebから拾ってきたものをコピペ)package.jsonと同じディレクトリにおけばmakeコマンドが使えるようになるということらしいけど
makeコマンドを使おうとすると
>make : 用語 'make' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。
ってなってしまうのはどうしたらいいんだろう? あ、makeもパッケージをインストールしないと使えないのか
上手くいったありがとう コマンドプロンプトで、そのコマンドの実行ファイル(.exe)を探すと、
漏れは、make をインストールしていないが、node.js をインストールしている場合、
where make
情報: 与えられたパターンのファイルが見つかりませんでした。
where node
C:\Program Files\nodejs\node.exe
PowerShell で、環境変数Path を表示すると、
$env:Path.split(";")
C:\Program Files\nodejs\
と表示されるので、ちゃんと、実行ファイルのあるフォルダが、環境変数Path に追加されている
つまり、実行ファイルから、拡張子を除いたものが、コマンド名となる!
ただし、その実行ファイルのあるフォルダが、環境変数Path に追加されていることが必要です!
普通は、個別のユーザー環境変数Path に追加する。
すべてのユーザーで共通にするなら、システム環境変数Path に追加する
コマンドプロンプトで、メモ帳のコマンドのパスを探すと、
where notepad
C:\Windows\System32\notepad.exe
C:\Windows\notepad.exe
このように、2つ以上見つかった場合は、一番上の実行ファイルが実行される 未経験でこれからフロントエンドの開発を行うとき、生のJSを覚えるべきなのかaltJSを利用すべきなのかどちらがよい?
用途は趣味用のユーティリティを自作する程度で、経験はwindows向けにC#、androidアプリをかじった程度 × altJS一択
○ TypeScript一択
その他のaltJSは全滅した kotlinはaltJSって言いたいの?え?(笑)え?え?(笑) JSの代替になりうるもの、つまるところ通常JSに変換できるようになっている言語で
特にDOMサポートもされているものはaltJSと呼んでいいだろう 生のJSというかESではいかんの?
TSとか、angular以外で使ったことない印象 別に好きにしたら
JS界やWeb界で確立されている手法は少ない
変化も早いし
だからとにかく好きにしたら良い CSSのpositionを総まとめ!absoluteやfixedの使い方は?
https://saruwakakun.com/html-css/basic/relative-absolute-fixed
このサルワカのサイトで、スクロールしていくと、
1. CSSのpositionとは?
2. positionとセットで使うtop・bottom・left・right
など、その章に入ると、
画面の上に、その章のタイトルが表示されるのは、どういう仕組みでしょうか?
今のスクロール位置を取得して、それと何を比べているのでしょうか? ズブのど素人ですお手柔らかお願いします
通信でパソコンにデータを受け取るのに
websocket.apiというのがあって
URLとtokenが書いてあるのですが
具体的にどうしたら良いのか分かりません
またdatastore.apiというのもあって
同様にURLとtokenが書いてあります
これはなんに使うのでしょうか? >>707
素人なのは別に良いので
素人なら素人なりに伝える努力をしてくれ
とりあえず>>1読もう >>706
今のスクロール位置がその章全体の要素内に含まれているかを比べてるんじゃね 「websocket」で検索して、目的・使い方を調べれば? >>707
「API」っていうものがどういうものか調べて理解できれば、
おのずとURLとトークンがどういうものかも分かると思う。
ものにもよるけどAPIって簡単なものも用意されてるはずだから、まずは調べながら実際に試してみたほうが理解が早いとも思う。 {name: 'ken', blood: 'a', city: 'tokyo'}
という形式のオブジェクトがある人数分あったときに
bloodで{AB: ['john', 'marie', 'adam']}のようなオブジェクトを作るときは
どうすればいいのでしょうか? function blood() {
return {AB: ['john', 'marie', 'adam']};
}
はい、bloodで{AB: ['john', 'marie', 'adam']}というオブジェクトを作りました >>714
bloodType = {
A: [],
B: [],
AB: [],
O: []
};
bloodType.AB.push(john);
bloodType.AB.push(marie);
bloodType.AB.push(adam);
みたいな感じではダメ? >>716
ありがとうございます
bloodTypeオブジェクトの各要素に、対応するnameの値を振り分けるときに
「bloodの値が'a'のオブジェクトのnameの値」をpushする
というような値の取り出し方ってできませんか あ、もしかしてこれであってます?
const obj = {name: 'ken', blood: 'a', city: 'tokyo'};
bloodType[obj.blood].push(obj.name); 皆さんKV Storageってまだimportmapにポリフィル併記して使ってると思いますけど
ポリフィルは自分が差し替えない限りずっと同じものですが
stdの方は将来的に実装が変化しない保証というのはあるのでしょうか
もしバージョン指定のような形になったとき、
WebComponentのv0のように古いバージョンのサポートを辞める可能性があるのでしょうか
そうなると、どれほど普及しようと必ずstdにポリフィルを併記し続けていかないといけないのでしょうか >>717
Object.entries -> Array.prototype.reduce shiftキーを押された状態にする方法を教えてください。
checkboxをonでshiftキーon、offでshiftキーoff、としたいのです。
タッチデバイスで利用します。jQuery使用でもいいです。
よろしくお願いします。 shift キーじゃなくて、Caps Lock キーじゃないの?
「jquery key 入力」で検索!
イベント発動時に、とあるキーを押す方法
https://qiita.com/takebayashi0612/items/657b61294645618485ef foreach で return が使えないようなのですが、値を外で受け取る方法はないのでしょうか?
現状、外に空の配列を置いて、そこへ push しています。 Ruby では、each_with_object の引数に、空配列・空辞書などを蓄積器として渡すと、
それが2つ目のブロック引数に渡ってくるので、そこにpush していくと、
最終的に、蓄積器を返り値として返してくれる
つまり、ループ内に蓄積器を置ける。
普通だと、ループ外に蓄積器を置くけど
ary_1 = [ 1, 2 ]
ary = ary_1.each_with_object( [] ) do | item, ary_2 |
ary_2.push item * 3
end
p ary #=> [3, 6]
同様に、map を使っても、蓄積器を返り値として返してくれる
p ary_3 = ary_1.map { |item| item * 3 } #=> [3, 6] >>728
プログラム板では有名な荒らしだからスルー推奨
「Rubyでは」「Ruby では」をNGしましょう
っていうのがあっちこっちのスレのテンプレに入ってるくらい有名なので触るのはやめよう >>724
それをshiftキーに当てはめるにはどうすればいいでしょうか? >>726
簡単なコードであればforeachの代わりにmapやreduceなどのJavaScript標準の関数を使用します。
JavaScript標準の関数でできない、または面倒なものは、UnderscoreやLodashというライブラリがよく使われます。
何が適切かは内容によります。 >>721
javascriptでキーイベントを発生させる
https://teratail.com/questions/78596
>event.ctrlKey = true; // コントロールキー
シフトキーなら、
event.shiftKey = true; // シフトキー
ただし、入力コントロールの、keydown イベントハンドラー内で、
$( this ).trigger( event );
みたいに、同じ入力コントロールに対して、トリガーを呼ぶと、
無限ループになって、stack overflow エラーになる!
それと、誰が質問者か分からないので、
投稿時には、名前欄に、721 と入れてくれ! Edge・Chrome でも、
入力コントロールに対して、トリガーを呼んでも、入力できないw >734
修正
入力コントロールに対して、トリガーを呼んでも、
コントロールには表示されないけど、情報は送られているw ここまでやってみた結論!
HTML 内のjQuery のトリガーでは、
入力コントロールに情報は送られているが、表示はされない!
一方、Selenium WebDriver で、ブラウザを自動操作すると、
入力コントロールに表示もされる! シフトキーの有無で、何をやりたいのか、知らないけど、
keydown で、シフトキーの有無を判別しても、
keyCode から、charCode(文字)へ変換できない!
以下のサイトで、それらの変換辞書を作っている!
https://www.code-adviser.com/detail_1772179
https://jsfiddle.net/5hhu896g/1/
<input type="text" id="text_2">
$( '#text_2' ).on( {
'keydown': function( e ) {
console.log( e.type, e.key, e.shiftKey, e.charCode );
},
'keypress': function( e ) {
console.log( e.type, e.key, e.shiftKey, e.charCode );
}
} );
$( '#text_2' ).trigger( $.Event( 'keydown', { key: 65, shiftKey: true } ) );
$( '#text_2' ).trigger( $.Event( 'keypress', { key: 65, shiftKey: true } ) ); >738
修正
2箇所の
>key: 65
key: "a"
keyCode なら、数字で良いけど、
key は文字列でした canvas上でマウスで要素を複数選択する際、
PCではshift+要素クリックで可能なのですが
タッチデバイスではこれができないため
checkboxを設けてshiftキーを押した状態を疑似させたいのです。
よってキーを押されたらとのイベントではなく文字通り>>721の通りにしたいのです。 複数選択したい要素が、例えば、Bootstrap の、
トグルボタングループ、チェックボックスグループ、セレクトボックスなどなら、複数選択できる
複数選択でも、ctrl キーとshift キーでは、複数選択される範囲が異なる。
セレクトボックスで確認してみて
Canvas 上ということは、上記のコントロールではなく、画像の一部分か何か?
特定の範囲を表すコントロールは、知らない。
そういうものなら、自作しないといけないのでは?
選択したら色を反転して、解除したら色を元に戻すとか?
それは、かなり難しい
>721 のように、特定のキーを押し続けている状態を維持することは無理です!
キーを押すと、すぐに放されるから。
または、押し続けると、連続して押されてしまうから
まあ、セレクトボックスで、複数選択を試してみれば? >>740
だから、>>724で「イベント発行しか出来ない」というてるのに、>>730に答えても要件を満たさない事に、なぜ気が付かない?
touch系イベントで複数選択可能なように、あなたがコードを書く以外に方法はない >>741
checkbox使うなら、そこからcanvasを直接操作すればよい セレクトボックスみたいに、複数選択できるHTML 要素なら、
その機能を、HTML/CSS がやってくれるから楽
でも、Canvas 上で単なる画像なら、HTML要素じゃないから大変!
画像を選択したら、選択したように色も変えたりしないといけないし、
どの部分を選択しているのか、自分で管理しないといけない
そもそも、タッチした座標が、どの画像の部分にあるのかも、計算しないといけない。
全く、ゲームプログラミングそのもの!
HTML で作る、普通のウェブページじゃない! vs codeにjavascriptのデバッガついてないの? 下のコンソールにリアルタイムで構文をチェックしてくれるあの機能ないの? デバッグがしたいのか構文チェックがしたいのか意味不明 >>741
>>745
>画像の一部分か何か?
>キーを押すと、すぐに放されるから。
>または、押し続けると、連続して押されてしまうから
まさにその通りです。それらは全てできあがってて不要で超簡単なのです。
ただ逆にそれ以外あまりいじれないという。
みなさんどうもでした。 >>745
普通はオブジェクトツリーとイベントバブリングを構築して
isPointInPathで済ますと思うから計算はしなくていい パズドラ・Jewels などによくある、画像の一部分を選択するのは、ゲームプログラミングだよ。
HTML, JavaScript のゲームプログラミングの本などを読まないと、無理
選択されたように見せるだけでも、かなり苦戦する
https://www.emanueleferonato.com/
こういうイタリア人が、Phaser でゲームプログラミングしてる。
彼は昔、Cocos2d-x(JS 版)の本も書いていたけど、最近は、Phaserばっかり! const matched = value.match(/正規表現/)[0] || ''
これだと結局、右辺にたどり着く前に左辺の時点で「[0]を読み取れない」って怒られるんですけど
ここからあまり変数を増やしたりせずに
「マッチしたならその文字列、しなかったなら空の文字列」を代入する方法ってないですか?
const matched = (value.match(/正規表現/)) ? value.match(/正規表現/)[0] : ''
だと同じこと2回書くことになりますし… >>760
初めから [0] ではない生データをとるのが最良
const matched = (value.match(/正規表現/)||[''])[0] 新規イオンカード発行で20%キャッシュバック祭り始まるぞ!増税前に大きい買い物するチャンス!
イオンカード決済で10%、イオン口座引き落とし設定で更に+10%
計20%最大10万円まで還元
https://i.imgur.com/Q3BbxXw.jpg
入会時紹介コード1500P
https://i.imgur.com/zSlYyfQ.jpg
※イオンカードセレクト(イオン銀行と一体型したクレカ)がオススメ >>760
const [matched] = value.match(/正規表現/) || [''] >>761
あーなるほど!
|| はいろんな場所で柔軟に使えるらしいことは知ってましたが、この例を見てとてもすんなり腑に落ちました…!
>>764
分割代入ですね、配列の中が変数1つなら自ずと[0]が入ると…!
それぞれすっきりした記述ですごく参考になりました、ありがとうございます 天才「自分の頭を使って考え適切なものを選ぶ」
馬鹿「何も考えたくない。全部同じものを使う」 >>767
天才と馬鹿というよりは普通の人と馬鹿じゃない?
天才は「この世にない方法を編み出す」みたいな 天才「独創的な考えを短時間で思索する」
常人「時間をかけて考える」
怠惰「先人に聞く」(同じ問題を何度でも) 馬鹿「考えるの面倒くさい、全部同じやり方でいいじゃん、コピペ楽じゃん」 >>768
天才とは才能が秀でている者を指す言葉で
新たな手法を編み出すと言うのはその一部
何れにしても大抵の人には何らかの才能が有る >>771
ただ才能が秀でてるくらいでは天才とは言わないよ
それはただの「秀才」
天才ってのは大抵の努力では到達できないレベルでかつ社会や歴史的に影響を与えるレベルじゃなきゃ天才などとは呼ばれない >>772
それは違う
過去に天才と呼ばれたり偉人とされた人がどういう人だったのか勉強してから発言した方がいいよ >>767
> 天才「自分の頭を使って考え適切なものを選ぶ」
これは常人の範疇
天才でなくても可能 どう違うのか自分では説明できないのに他人に勉強しろとか文句付けてる時点でこいつは頭悪そう 二次元配列があった場合、javascriptはx(横)から先に読むんですか?
普通はyからだとおもうんですが。 JSにアクセスアシスト付き多次元配列は無い
単純に配列が入れ子になっているだけ
考えを整理しろ 配列の入れ子で質問があります。
for文の i を1階層目のインデックス番号として使用すると、エラーになってしまうようです。
何が原因なのでしょうか。
また、回避策はありますでしょうか。
var arr = [
[1, 2, 3],
[4, 5, 6]
]
for (var i = 0; i <= arr.length; i++) {
console.log(arr[1][1]); // ok
console.log(arr[1][i]); // ok
console.log(arr[i][2]); // err なぜ?
} for (var i = 0; i <= arr.length; i++) {
console.log( i ); // ok
console.log( i, arr[i][2] ); // err なぜ?
}
出力
0
0 3
1
1 6
2
Cannot read property '2' of undefined
そこは、0〜1 の範囲だろ。
2 は、範囲外! i <= arr.length だから2までインクリメントされてるって話ではないの?
i < arr.length にすればいいだけでは? >>782-783
さっそくありがとうございます。
まさか <= となっているのが原因だったとは全く気づきませんでした。
やむおえず forEach で代替しておりました。
お二人様本当に助かりました。 aryAry.forEach((ary)=>{
// ...
// 長い記述
// ...
ary.forEach((value)=>{ "なんかする"; });
})
↑のような場合、なんかする関数が何度も作られ効率が悪い(測ると実際遅い)ですよね?
外だせばいいじゃんってことですが、1箇所でしか使わないのに記述がバラけるのが少し嫌だなと思い
何かいいとこ取りした綺麗な書き方はないか、というのが質問です
(外に変数だけ用意しといて nanka || (nanka=(value)=>{ "なんかする"; }) みたいなことはできるかも) >>785
どれくらい遅くなりましたか?
パーセンテージじゃなくて実時間(n回で○ms)で答えてください >>786
50万回で300ms程度、外だしだと20ms程度です 数千回以上呼び出されるようなものでない限り気にしなくていいぞ
多くの場合長い記述の方を見直したほうが結果が出る
どうしてもってのならforEachも関数も遅いんだからどっちも使うの禁止な 千回でも数千人の環境で数十回実行されたら1億とか超える
そうするとそこに手を入れて削減できる実行時間が1時間とかになる可能性があるのだから
気にするくらいはしないとだめ >>792
JavaScriptはクライアント側で動くんだよ
だから何千人、何万人来ようが
かかる時間は50万回で300ms程度 Googleはページ表示まで2秒以内にすべきとしているし、Amazonは0.1秒の差が1%の売上に影響するとしている
それからすると、300msは決して小さい数字ではない Nodeとかサーバーサイドならアホみたいなループは使わなくて済むように考えたほうが良いだろうね >>795
> それからすると、300msは決して小さい数字ではない
50万回で300msな
5万回なら30ms、5千回なら3ms
500回なら0.3ms、50回なら0.03ms
って計算できるやろ?
小さいかどうかは、ループ回数で決まるんだよ 単純に1分考えて世界中のコンピューターの負担を1時間分節約できるのなら
まあ良いプログラマとしてはやるべきだな
塵も積もれば山となるし 1分考えて、節約できるのは0.03msとか
逆にコストが掛かってる >>794
> だから何千人、何万人来ようが
> かかる時間は50万回で300ms程度
脳内データを元に仮設を立てられましても… 1回が「0.0006ms = 0.6us = 600ns」の処理速度で実行可能なCPUがデファクトスタンダードな世界に生きてるんだろうさ
スマートフォンのスペックに相当余裕がある夢物語だな >>801
そこを突っ込むとかバカか?
クライアントで動かすとは誰も言ってないのだからそちらを突っ込むべきだろう >>804
読まずに>>803を書くほうがおかしいと思わないのか? >>793
785です、やはりそうですか
トンクス >>806
確定してないからこそのツッコミどころだろ >>808
未確定なら、クライアントの話をしても問題あるまい > 単純に1分考えて世界中のコンピューターの負担を1時間分節約できるのなら
CPUにはアイドル時間という何も処理してない時間があって、
ネットワークやディスクアクセスのI/Oによってその時間がどうしても生まれる。
300ms程度増えたってCPUの使用率が50%から50.01%になる程度で
何もしないアイドル時間が減るだけでコンピュータの負担は減らない
1時間節約するには、何億アクセスレベルの処理が必要でしょう >>766
それなんですか?
検索したら「パイプライン演算子」 |> ってのは出てきましたが、 |.? についてはわからず… >>811
value.match(/正規表現|.?/);
こういう事なんだろうけどこれじゃマッチしなかった時どこか1文字拾っちゃう可能性あるわな
matchだけでやるならこうかな?
value.match(/正規表現|$/); >>809
クライアントに確定したかのように話すのはツッコミどころだろ 文字列と正規表現の合致チェックをする場合、
文字列のmatchメソッドを使っても、
正規表現のtestメソッドを使っても、結果は同じなのでしょうか?
どっちの方がいいとかありますか? >>812
あぁなるほど、.?という何やら特殊なプロパティがいつの間にかできてたのかと思ったら
||['']のところに置き換えるってわけじゃなくて単に正規表現の中に入れると
正規表現で^(先頭)や$(末尾)は必ずヒットするけど長さは0文字…!
言われてみればそうですね、注意は必要なものの何かしら応用できそうです testのほうがだいぶ高速みたいだけど、比較するなら正規表現のmatchメソッドでないの? >>816
そうなんですね
単なる真偽チェックならtestでやった方がよさそうですね
ありがとうございました >>818
どう見ても確定したかのように言ってるだろ すごい初歩的な質問ですみません
window.onloadとimg.onloadでは、実行の順番みたいなものはありますか?
自作のプログラムでは、img.onloadの内容が終わってからwindow.onloadが実行されるみたいなのですが >>819
Node.jsが考慮外な程度でカリカリしなさんな
というか、そんないきり立って怒れるほど、Node.jsのシェアは高いの? 文字列のn番目を書き換える方法って有る?
var a = "00000"; を n=3なら var a = "00100" にするような
n = "3";
i = 0;
var a = "";
while (i < 5) {
if (i == n) {
a += "1";
} else {
a += "0";
}
i++;
}
一応これで同じことはできる >>820
window.onloadはimgやiframe等も含めて必要な物が全て読み込み終わってから発生するイベント
DOM構築が終わってすぐ動いてほしいなら
document.addEventListener("DOMContentLoaded", 〜);
を使いましょう >>822
はい。
var func = ([...a], n) => (a[n - 1] = '1', a.join(''));
var a = '00000';
var n = 3;
func(a, n);
//=> "00100" >>822
a.replace(new RegExp('^(.{' + (n-1) + '}).'), '$11'); >>826
>>827
すげー
どっちも今の知識じゃわけわからんからググって勉強します
ありがとう >>826
やりたいことエスパーしてちょっと修正
var func = ([...a], n, c) => (a[n - 1] = c, a.join(''));
var a = '00000';
a = func(a, 3, '1');
console.log(a);
//=> 00100 >>822
String型はプリミティブ値であり、プロパティ書換は不可
new Stringなら参照型だが、valueOfを書き換えて擬似的にプリミティブ値を書き換えるのが限度で、再代入とほぼ同じ
1文字レベルで書き換えたいなら、ユーザ定義コンストラクタ内でやるのが現実的 >>829
これでもいいな。
var func = ([...s], n, c) => s.map((v, i) => i === n - 1 ? c : v).join(''));
var a = '00000';
a = func(a, 3, '1');
console.log(a);
//=> 00100 >>831
灯台下暗し、spliceが一番シンプルか。
var func = ([...s], n, c) => (s.splice(n - 1, 1, c), s);
var a = '00000';
a = func(a, 3, '1');
console.log(a);
//=> 00100 >>832
おっとjoin忘れたw
var func = ([...s], n, c) => (s.splice(n - 1, 1, c), s.join(''));
var a = '00000';
a = func(a, 3, '1');
console.log(a);
//=> 00100 いいかげんjQueryから脱しようと思い、例えば<input>タグ内のテキストの書き換え処理を
$elem.val('テキスト')
でなく
elem.value = 'テキスト'
に変えてみました
そしたら気付いたのですが、JSでは関数が少ないためval()のようなメソッドが(エディタの色変えも相俟って)目立つのに対し
単にプロパティへの代入という形で書くと、どういう意味の代入なのかパッと見で区別しづらく…
Vanilla JSでもあえて明示的にするために、こういうちょっとした代入処理も独自関数にしたりするものでしょうか?
それとも気にせずに「 .value = 」で代入しちゃってれば慣れる感じですか? ほら、意味もなくjQuery脱出なんかするから
そういうことを考えなければいけなくなったw >>834
プロパティ代入なんて当たり前
関数が良いなら、setAttribute() があるが、属性とプロパティでは意味が違う
valueに限らず、DOMを基礎から学習すべき jQueryをやめるということは、そういう設計も
自分で考えて判断するということです。
jQueryがやってくれていた作業を自分でやるということなんですよ >>835
いや、元々jQueryではできないことをするためにいちいちget()したり、
これをするときはjQueryオブジェクトでこれをするときは違って…って使い分けるのが面倒すぎたので… jQueryでできないけど、get()で出来ることって? >>836
当たり前なのはそうですが、なんでもかんでも = だと可読性悪くないですか?という話です
そりゃsetAttribute('value', 'テキスト')とvalue = 'テキスト'は全然違いますよね
いきなり「DOMを基礎から学習すべき」という発言に至られた理由はちょっと推察しかねますが…
>>837
とりあえず使う関数やメソッドは自分で用意してますし設計を自分でするのは望むところですが
自分の脳内だけで好き勝手やる前に、まずは先人の話を聞こうと思い >>840
そもそも、なぜ「関数」が良くて、「プロパティ」が直観的でないと思ったのか、を論理だてて考える必要があると思う
プロパティにはgetter/setterもあれば、Proxyもある
処理が伴うプロパティは全く珍しくないし、DOMには反映型属性もある
原理さえ覚えれば、「プロパティだから直観的でない」と思う事はない どちらかといえば、jQueryが何でもかんでも関数化していて、分かりづらい印象だけどな…
jQuery#valがなぜ関数か、って実装当時はsetterがIEになくて、相互運用性の為に関数を採用しただけ
input要素のvalue属性を見るなら、状態を表すプロパティが直感的 > jQuery#valがなぜ関数か、
基本的な設計に従って、 $('.class').val(123) ってするためやろ
なに勘違いしてるんだ? あと、setterは、Firefox2(2006年10月)やSafari3(2007年6月)以上から対応だから、
jQueryリリース(2006年8月)時点ではどのブラウザも対応してねーよ >>840
jQueryほとんど使わないんだけど
代入が可読性悪いなんて思ったことないので気持ちがわからない
慣れだと思う 未だにjQueryがブラウザ間の互換性をもたらすライブラリだと思ってる人がいるんだね。
jQueryはDOM要素をリスト処理できるようにするライブラリだよ。 どちらかといえば、jQueryのメソッドチェーンは気持ち悪く感じるな
何でもかんでもjQueryオブジェクトにのメソッドにして、返り値をjQueryオブジェクトにする
メソッドチェーンの為に複数の役割を強引に一つに統合した感が強い 漏れは、Ruby でも、grep 時に困るから、短い表記は避ける。
代入よりは、setAttribute などの方が、検索しやすい
ただ、速度が遅くなるのが嫌なら、コメントを付ける
ary = [ ]
ary << "a" # Array#push
ary.push 1
p ary #=> ["a", 1]
>>821
Ruby でも開発時には、Node.js, jQuery, Bootstrap, Webpack, Babel などは必須。
npm, yarn などのパッケージマネージャーが無いと、異なるバージョンを管理できないから >>848
メソッドチェーンはパフォーマンスのために有るんだよ。
もしメソッドチェーンがなければ、$(セレクタ)を一旦ローカル変数に入れないと
メソッドを呼び出す毎に、内部でquerySelectorAllする必要がある
メソッドチェーンが有るのでローカル変数を使うこと無く、
パフォーマンスを落とすこと無くメソッドを実行できる >>849
開発環境としてのNode.jsではなくて、サーバサイドスクリプトとして、だよ
クライアントに限定するな云々はそういうことだよね? >>849
重要なのは短いかどうかじゃなくて、
単語で区別できるかどうかやろ?
setAttributeでもattrでも検索性は変わらない
> ary.push 1
あちこちでpushが使われてるのに、検索しやすくなるわけがない
<< で検索しても何も違いはない >>851
一旦ローカル変数に入れれば解決するのならパフォーマンスのためじゃないじゃん Ruby でも、メソッドチェーンのままなら、遅延処理ができる場合がある
例えば、a().b().c()
で、途中で実体化しないで、最後の所でだけ実体化する
Generator みたいに、無限配列の最初の5つとか、取得できる
もし、これを途中で変数に入れると、先に無限配列が実体化されて、エラーになる。
ただし、関数のまま持ち運べば、OK なのかな? jQueryはNode,Element,HTMLCollectionmHTMLAnchorElement...etcを廃止して、全メソッドをNodeListに生やしているようなもの
で、9割以上のメソッドを「絶対NodeListを返す関数」にしてメソッドチェーンを強引に実装
複数のオブジェクト指向から、jQuery単独の独裁思想に染まっているわけだな
ESで「Arrayだけあればいいのた」と唱えるようなもの ム板は人いなさそうだったけどNode.jsの話はここでいい?
Node.jsでファイルの排他ロックってどーやんの?
自分で実装するか外部ライブラリをインストールして使うしかない? >>856
えーと、事実を述べたってのはわかるけど、、
別にそれ悪いことじゃないよね >>862には排他制御気にしなくていいどうだすごいだろみたいなことかいてあるんだけど… シングルスレッドだから1プロセス内のメモリの競合はないけど、
マルチプロセスでファイル操作するなら排他ロックは要るやろ。 >>862にはシングルスレッドは誤解でスレッドプールがあってマルチスレッド走る
けどそんな実装意識しないで使えるって書いてあるけど… >>864
ファイルならロックができるでしょ
自身がマルチプロセスとか全く関係なく
他のアプリから触られるかもしれないのでロックするのが常識 誰もファイルをロックできないなんて言ってないんだがw
>>863が排他制御気にしなくていいと書いてあるって言ったからファイルの排他は要るやろと言っただけで 誰もファイルをロックできないなんて言ってるなんて言ってないんだがw
マルチプロセスとか関係ないやろと言っただけで >ファイルならロックができるでしょ
これはどういう必要性があって言ったんだ?
ロックできると理解してる相手にこれを言う思考回路が理解できんわw そのページ持ち出した奴どういう意図か知らんが、ファイルの排他制御全然関係ないじゃん。
nodeならfs.openにflags指定するだけだろ。 >>857
ファイルもDBも排他制御ぐらい付いてるのが普通だ通ってた
むしろ、出来ない言語はあるのかな >>869
理解できないのは完全に君のオツムの問題だね >>857
async await 関連の排他ロックは色々あるよ
node.jsは
「既にこの世にあるコードは例え1行でも自分では書かん!」みたいな文化あるんで
npm漁ればコレでもかっつーくらい色々あるよ >>857
https://nodejs.org/docs/latest/api/fs.html#fs_file_open_constants
> O_NONBLOCK: Flag indicating to open the file in nonblocking mode when possible. 要素の座標を取得して、要素をクリック時にその値を使用するとした場合、
事前に取得してクリック時の処理を軽減する方が望ましいのでしょうか?
事前に取得する場合は、ブラウザをリサイズしたときに、要素の高さが変わる
可能性があるため、リサイズする度に値を取得する必要があります。
このような場合、記述が増えるけども、クリック時の処理の軽減に努めるべきなのか、
座標の取得など大した処理ではないので、クリック時に取得するべきなのか、
構成の考え方について、ご指導お願いいたします。 処理を軽減して一体どの程度の効果があるのか
説明出来ないなら検討する必要なし 早速ありがとうございます。
全く説明できそうにないので、クリック時に取得します。
少し↑でも何万回繰り返すと、ほんの少し早くなる・・・みたいなこと
書いてありましたし。
フロント側で初心者なので、対して難しい処理できませんので。
モヤモヤが晴れました! 凄い丁寧で分かりやすく説明できるアホな質問者だったな async関数でreturn trueしてるコードを見かけますが、
これは普通の関数でのreturn Promise.resolve(true)と同じですか?
async関数は明示的に値を返さなくてもPromiseを返しているようですが、これらに違いはあるのでしょうか >>882
おなじ
asyncで関数を呼んだ時点で、Promiseが返ってる
その関数がreturnすると、そのPromiseがresolve(返り値)する
その関数が何か値をthrowすると、そのPromiseがreject(値)する すまぬちょいおかしかった
誤:asyncで関数を呼んだ時点
正:asyncの関数を呼んだ時点 flock(群れ)ではないんじゃない?
分からんけど >>885
NONBLOCKはプロセスをブロックするかどうかで逆立ちしたってファイルロックとは関係が無い
>>887
そのとおりだがflockはfile lockの略だ ファイルロックはクロスプラットフォームの実装が面倒そうだな… >>882
プロミスを解決するためのreturnと、解決されたプロミスを返すreturnは概念的に違う >>883
ありがとうございます!
>>890
勉強します ドキュメントが読み込まれて
src属性とかのソースをブラウザがとりにいく前に
srcをとりにいかないようノードを削除したいのですが
どのイベントを使えばいいですか?
onloadでは一旦srcをとってきてから削除になるのでリクエストは発生してしまいます サービスワーカーですか?ありがとうございます
XHRから手つけてないのでちょっと読みましたが全くわかりませんでした
ちょっと頑張って勉強してみます サービスワーカーじゃ初回訪問時はアウトじゃん
はぁ〜つっかえ >>892
イベントじゃ無理だよ
そんなイベントはない。
無理にやるなら、document.writeを使って、HTML全体をコメント化する。
そして、ページ読み込みあとにHTMLを解析すればできるかもしれないけど
HTMLの中にコメント有るとうまく行かないし、まあまず無理
ブラウザ拡張を作るぐらいかねぇ ブラウザ拡張も通信内容を完全に横取りできるAPIは削除される >>892
作ってみたよ。
https://codepen.io/shinji709/pen/xxKJZba
https://codepen.io/shinji709/pen/LYPBGqY
上がsrc属性のみ削除(一応data-stashed-src属性作って保存)
下がimgタグごと削除
非推奨タグ使ってるんだけど代わりになるタグ無いんだなぁ… まだ1つも案が出てきてないのに代替案ってどういうこと? な、なんか狐に
つつまれたような
気がする・・・。
∧_∧
/ ヽ
|` ´|
`<>○<>\= oノ
/ハ\⊂二_ヽ
`/ ∧_∧ヽ |
|(´∀`)|ヽ | |ヽ
| \yノ |( |ノ |
ヽ___ノと_ノ_ノ テトリスに関してなんですが、
if (tetro[y][x])
でブロックのいちを指定できるのはなぜですか。
if tetro[y][x] == 1{}
とかだったらわかるんですが
https://youtu.be/LJlKaTwtSdI?t=743 >>910
jsではfalse, 0, "", null, undedined, nan以外は全部trueとして扱われるので、
if 1はif 1 == 1 と同じ働きをする >>910
if 文の中は Boolean 型に型変換される >>911
全部ではない
例えば[[IsHTMLDDA]]内部スロットがあるオブジェクトはfalsy 配列の中に連想配列を格納してある場合、forEach的なループ処理はできますか?
Object.keys()の forEach は無理そうでした・・・ >>914
参考: https://jsfiddle.net/Lq082r6t/
頼むから質問する時はサンプルコードを置くか、言葉を正確に使ってくれ
forEach的とか無理そうとか此方は何も分からん >>914
何をしたいのか良く分かっていないんですがこういう事ではないんですよね?
https://i.imgur.com/fujemgH.png >>911
>>912
どうも
わかりやすい表記に変更したほうがいいですね Ruby なら、辞書も簡単に繰り返せるけど
hash = { 1 => 9, "a" => "X" }
p hash.keys #=> [1, "a"]
hash.each { |key, val| p [ key, val ] }
出力
[1, 9]
["a", "X"] Ruby便利そうですね。JavaScriptの代わりとしてブラウザで
動かすにはどうしたら良いでしょうか?
Ruby2.0はChromeブラウザでネイティブに動くようになりそう
http://hoshi.air-nifty.com/diary/2012/05/ruby20chrome-d6.html NCはもう死んでるいまはWASM
WASMでRubyのようなモダン言語を動かそうと思ったらエンジンごと移植しないといけないので
それならRuby2JSトランスレータ使うほうが現実的
もう数年したらWASMがGCに対応するからそこからがWebマルチ言語の本番
このページをずっとチェックしてろ
https://github.com/WebAssembly/proposals え?Ruby動かないんですか!?
それじゃゴミじゃないですか! そういうのはもう良いから
そんな言語同士で張り合うような時代じゃないから wasmはjs製のjsコンパイラをさっさと作っとけば爆発的に流行っただろうに js自体がコンパイルに向いていないのが最大のネック vscodeを使っているんですが、補完してくれるアドオンないでしょうか
getcontext2dが出てこないのですが、これはもしやjavascriptと関係ないですか? あと、fillstyleとかも出ませんね
eslintというのを使っています getContext("2d")はHTMLCanvasElementのメソッド
fillStyleはCanvasRenderingContext2Dのプロパティ
getContextを呼び出そうとしているインスタンスがCanvasじゃなかったら当然補完は死ぬ
ESLintはLinterであって補完とか関係ない 勘違いしてました
linterは構文チェックですね
ということは今使えているのはvscodeデフォルトの補完ということですかね
canvasを使用していますが、getcontextは補完に出てこないです >>921
Ruby は、サーバー側で使われる。
サーバー側は、Ruby on Rails, JavaScript のNode.js とか
サーバー側で、HTML を組み立てるまでが仕事
クライアント側は、jQuery, Bootstrap, Vue.js とか
最近のサーバー側では、マイクロサービスで、Go を使うこともあるらしい。
サーバー側のJava, Python などは、Rubyよりも、遥かにシェアが少ない getContextで保管してくれるのは難しいでしょ
('2d')に限らないんだし
ChromeのConsoleとSourceパネルのライブエディタ使って開発するしかないんじゃない getContextも引数は定数なんだから難しくはないっしょ >>932
HTMLCanvasElementなら、.geぐらいで出る
getElementByIdで取得したHTMLElementでCanvasと認識されてなかったら出ない
認識させるにはTypeScriptだったら型付けるだけだけどJavaScriptだとinstanceofとかかな(分からん)
Canvasさえ認識されればgetContext("2d")の型は自動的に判明するから問題ないはず >>934
TypeScriptの型で"2d"だった場合〜って感じで定義されているから補完できる DOMツリーから探してきた要素がcanvasかどうかなんて
エディタの知ったことじゃ無いわな 型付け出来ないことが補完されない原因なら、すべての候補出しちゃえばいいんじゃないんですか そんなんここで聞かれても…
どうしても補完して欲しいならtypescript使うかjsdoc形式でコメントしておくか >>939
それじゃあ存在しないメソッド呼んじゃうじゃん…
if (canvas instanceof HTMLCanvasElement) {
// getContext補完される
}
// 補完されない typescriptの導入からわからんので、覚えます >>941
そもそもHTMLCanvasElementなどが書き換えられていない保証がないのでは?
もしくはHTMLCanvasElementベースのカスタムエレメントでgetContextが殺されてるかもしれないし >>943
HTMLCanvasElement自体の書き換え、お行儀悪過ぎるしそれはやる奴がダメな気がする instanceof演算子ってSymbol.hasInstanceの影響を受けるから静的解析には使えないんじゃないの? javascriptには連想配列をオブジェクトと呼ぶとあったのですが、
配列用のカッコに値を格納しコンソールログで出力したところ、
オブジェクトとは違う出力結果となりました。
これは連想配列と考えてよいのでしょうか。
var a = {};
a[5] = 'abc';
a[4] = 'def';
console.log(a); // Object {4: "def", 5: "abc"}
var b = [];
b[5] = 'abc';
b[4] = 'def';
console.log(b); // [4: "def", 5: "abc"] >>947
連想配列をオブジェクトと呼ぶが、配列もまたオブジェクトなので連想配列として使えるが使わないほうが良い 連想配列なんていう用語はJS仕様にはないので
連想配列と考えてよいかどうかは自分自身が決めること 確かにMapが近いだろうが、最終的には個々の「連想配列」のイメージに引きずられるからな
標準仕様で定義されていない用語は使わない方が混乱が少ない
https://teratail.com/questions/211927 配列は、キーを数値だけに限定したもの
Object を、連想配列・辞書のように使うと、__proto__ というキーでバグるから、要注意!
Haxe では、キーの前に、@ を連結してた
キーがabc なら、@abc にする。
__proto__ なら、@__proto__ になるのでバグらない
ES2015 以降なら、Map を使えばよい Mapにreduceやfilterがないのはなぜ?
配列にしては低機能過ぎでは? http://www2u.biglobe.ne.jp/~oz-07ams/2002/ecma262r3/15-4_Array_Objects.html
new MapはES3のArrayにも及ばないんじゃないかな
sort,slice,unshift,concat...etc
配列としては足りない機能がかなりある >>947 です。
配列用のカッコでも行けるけど使わない方がよいのですね。
forのiと連動させつつ、歯抜けでpushして配列使えたらよいなと
試してみたところでして。
普通にオブジェクトか配列きちんと埋めて使います。
ありがとうございました >>954
JSの場合後戻りできないので慎重になっているだけ
議論はちゃんと進んでいる const str = `abc
123`
const lines = str.split( "\n" ); // 配列
console.log( lines ) //=> [ 'abc', '123' ]
1行ずつ処理するのに、上のように、split を使って、一旦配列に入れたのですが、
下のRuby みたいに、配列に入れずに、そのまま1行ずつ処理できますか?
str = <<"EOT"
abc
123
EOT
str.each_line do |line|
line.chomp! # 末尾の改行を削除する
p line
end
出力
"abc"
"123" str.split('\n').forEach(line => console.log(line))
str.replace(/.+/gm, line => console.log(line)) >>962
> str.replace(/.+/gm, line => console.log(line))
"." を使うなら、mフラグが不要では? ちょっと見ない間に定数宣言もできるようになったんか >>964
空行も処理するのは、
console.log(str.replace(/^.*$/gm, line => line + ' peropero'))
または、
for (const line of /^.*$/gm) console.log(line + ' peropero') 質問です
let str1 = '庭には二羽鶏がいるオムライス食べたい2日目';
let str2 = 'にわにはにわにわとりがいるおむらいすたべたいふつかめ';
このstr2のテキストから
str1の中の平仮名以外の文字の読み仮名に該当する部分を取り出したくて試行錯誤してます
str1を平仮名とそれ以外に割って
['庭','には','二羽鶏','がいる','オムライス食','べたい','2日目']
str2の先頭から、配列2つ目の「には」が出てくるまでが
配列1つ目の「庭」の読み仮名だ!
という方針でやってみて、上記の例だとうまくいくんですが
indexOfの引数になる平仮名が漢字の読みに含まれてしまうと失敗します
let str1 = '煮蛤には焼酎よりも日本酒';
let str2 = 'にはまぐりにはしょうちゅうよりもにほんしゅ';
これだと、配列2つ目の「には」が、読み仮名となる「にはまぐり」に含まれてしまうので
どうも方針が間違ってる気がしているのですが
なにかうまいやり方はありますでしょうか >>967,968
お前大丈夫か?
被害妄想も大概にしろ
いつ誰が>>965がおかしいと言った? >>975
「知ったか」と「無知」にレスアンカーを付けないで、なぜ通じると思ったんだ? >>972
単純に、漢字とその読み仮名を定義すれば?
"赤色" : [ "あかいろ", "せきしょく" ]
プログラム板のアルゴリズムとか、日本語解析などのスレで聞けば? >972
漢字部分を.+に置き換えた正規表現でひとつのマッチは
得られると思う。
ただ、受理できる全パターンの列挙とその中から
正解を選び出す手段は別に必要かな。 >>972
漢字と平仮名の対応表なしに正解を導き出すのは不可能
庭にわ二羽庭
にわにわにわにわ
プロクラムには、各々の漢字の「にわ」と「にわにわ」を区別出来ない
全パターンを掲示して、人間に正解を選んで貰うのが次善解 >>977-979
あざます
やっぱ無理ですかねー
なんかこう、確実に一致する平仮名は含まれているので
うまーくマスキング出来ないかなーとか思って始めてみたんですが 考えないで脳死回答すると後ろからみていきゃいいんじゃね >>983
あざます
形態素解析は>>972よりも先に思いついて、まず品詞で割ってみたんですが
平仮名化の精度が微妙だったんでですよね…
このアプローチも頑張ってみます >>983
いろいろゴニョゴニョしたんですが
最初は茶筅の形態素解析を使って失敗していたんですが
gooラボの形態素解析APIは品詞分解した結果に読み仮名が付いていました!
これでかなり精度上がりました
ありがとうございました! >>981
おもしろそうなのでちょっとやってみた。
const kanafuri = (漢字かな混じり文, かな文) => {
const matches = [...漢字かな混じり文.matchAll(/(?<ひらがな>\p{Script=Hiragana}+)|(?<ひらがな以外>[\P{Script=Hiragana}]+)/gu)]
const 行頭の文字種 = matches[0].groups.ひらがな ? 'ひらがな' : 'ひらがな以外'
const 行末の文字種 = matches[matches.length - 1].groups.ひらがな ? 'ひらがな' : 'ひらがな以外'
const ひらがなchunks = matches.filter(({groups: {ひらがな}}) => ひらがな).map(([match]) => match)
const [_, ...よみがなchunks] = RegExp((行頭の文字種 === 'ひらがな以外' ? '(.+)' : '') + ひらがなchunks.join`(.+)` + (行末の文字種 === 'ひらがな以外' ? '(.+)' : ''), 'gu').exec(かな文)
result = ''
for (const {groups: {ひらがな, ひらがな以外}} of matches) {
if (ひらがな) {
// ひらがなのときの処理
result += ひらがな
} else {
// ひらがな以外のときの処理
result += ひらがな以外 + '【' + よみがなchunks.shift() + '】'
}
}
return result
} >>987
const str1_漢字 = '庭には二羽鶏がいるオムライス食べたい2日目'
const str1_かな = 'にわにはにわにわとりがいるおむらいすたべたいふつかめ'
const str2_漢字 = '煮蛤には焼酎よりも日本酒'
const str2_かな = 'にはまぐりにはしょうちゅうよりもにほんしゅ'
const str3_漢字 = 'あのイーハトーヴォのすきとおった風、夏でも底に冷たさをもつ青いそら、' + //5ch制限のため改行
'うつくしい森で飾られたモリーオ市、郊外のぎらぎらひかる草の波。'
const str3_かな = 'あのいーはとーゔぉのすきとおったかぜ、なつでもにわにつめたさをもつあおいそら、' + //5ch制限のため改行
'うつくしいもりでかざられたもりーおし、こうがいのぎらぎらひかるくさのなみ。'
console.log(kanafuri(str1_漢字, str1_かな))
//=> 庭【にわ】には二羽鶏【にわにわとり】がいるオムライス食【おむらいすた】べたい2日目【ふつかめ】
console.log(kanafuri(str2_漢字, str2_かな))
//=> 煮蛤【にはまぐり】には焼酎【しょうちゅう】よりも日本酒【にほんしゅ】
console.log(kanafuri(str3_漢字, str3_かな))
//=> あのイーハトーヴォ【いーはとーゔぉ】のすきとおった風、夏【かぜ、なつ】でも底【にわ】に冷【つめ】たさをもつ青【あお】いそら、【、】
//5ch制限のため改行
うつくしい森【もり】で飾【かざ】られたモリーオ市、郊外【もりーおし、こうがい】のぎらぎらひかる草【くさ】の波。【なみ。】
、や。の扱いが不服だが疲れたのでここまでにする。
参考:
Unicode property escapes
https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions/Unicode_Property_Escapes
Unicodeの文字プロパティを指定した正規表現をみてみる(ECMAScript2018)
https://blog.tes.co.jp/entry/2018/06/29/145450 アホみたいにズラズラ書かずにコード投稿サイトに書いてくれ
>>1にも書いてあるだろ
しかもJaneだとインデントもされないし読みにくいことこの上ない イーハトーヴォのかな文、誤字ったぜ…
底をにわって書いちゃったんだぜ。
例文1でにわにわうるさいから… インデントが無くなっても、VSCode のフォーマットの拡張機能で、自動的にインデントされるだろ? 5ちゃんに長々と書かれてるコードをいちいちエディタにペーストしないわ つまり5ちゃんに長々と書くことによって、みんながコードをいちいちエディタにペーストする手間を省いたわけだ。親切! >>999
形態素解析APIで解決したって言ってんだろうがマヌケ このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 77日 22時間 54分 33秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。