+ JavaScript の質問用スレッド vol.132 +
レス数が1000を超えています。これ以上書き込みはできません。
JavaScript を自ら学ぶ人のための質問スレッドです。
次スレは>>950が(本スレで改善案があれば考慮して)立ててください
■規則/推奨ルール
・メール欄を空欄にし、名前にレス番を入れることを強く推奨(なりすまし防止)
・質問内容は具体的に。言葉だけでなく、出来る限り再現性を確認したサンプルコードの掲示。
・質問テンプレートの利用推奨。
・質問への「答え」だけでなく「意見」を出しても良い。
■禁止行為
・丸投げ質問
・迷惑スクリプトの質問
・オレオレ用語の使用(一般的な用語を使用する事)
・煽り、批判等の他人を不快にさせる行為(批判の代わりに「AよりBが良い」のような代案を出す事)
■質問テンプレート
【環境】OS, ブラウザをバージョンと共に記入してください。(ex: IE8, Firefox4)
【条件】期待する回答の条件を書いてください。(ex: jQuery不可, フレームワーク不可)
【何をしたのか】何をしたら問題の現象が発生するのか。再現手順を具体的に書いてください。
【エラーメッセージ】エラーメッセージがあれば正確に書き写してください。(Windows なら「コピット」を活用)
【期待する結果】最終的にどういう結果を望んでいるのか、を書いてください。
【サンプルコード】現象を再現可能な最小限のコードを書いてください。
1レスに収まらないならコード投稿サイトを利用してください。
http://jsdo.it/ http://jsbin.com/ http://jsfiddle.net/ http://ideone.com/
■回答者へ
・回答には多様性があります。他人の回答を尊重してください
・動作ブラウザや環境が限られる場合は、それを明記してください
・他人の回答を批判する代わりに、自分ならこう書くという例を示してください
・質問者がJavaScriptでなければ実現できないと勘違いしてるなら、その否定としてHTMLとCSSで実装しても良い
・他人の回答を見たくないのであれば、文句をつける代わりにNGにして見えないようにしてください。文句をつける=荒らしです 配列に配列を破壊的に追加したい場合
Array.prototype.push.apply(array,array1)
とやりますが、
これと同じことをやる関数はlodashにないのでしょうか?
こういう書き方はシンプルじゃないので、
こういうのこそlodashにあって欲しいのですが見当たりません
他のやり方があるのでしょうか? javascriptで作ってもらったウェブアプリの出来がいいかわるいか
どのあたりを見てどうやって判断すればいいんでしょうか? >>952
いや、lodashは関数型っぽくするライブラリだから
破壊的なメソッドの方が違和感あるよ
ただの便利ツールじゃないんだからさ
そこの所は認識間違ってるので訂正しておいてね >>952 array.push(...array1)でいいじゃない
>>953 全部を見て君が素直にどう感じるか 回答ありがとうございます
>>954
関数型言語的な性質が大きいのは確かですが
破壊的メソッドも複数提供してるのでそこは是々非々では?
>>955
その書き方をすっかり忘れていました
こういう場合に使うんですね・・!
ありがとうございました chromeで画像検索結果等から、画像を自PCにダウンロードして自分のブログへ画像アップロード
というような画像アップロード簡易プログラムといったものを作成したいと思っています。
この一連の処理を一度行うプログラムの開発を試みています。
画像を右クリックすると「ブログにアップする」などみぎっクリックメニューなどを作成するのが目標です。
PHPで自分のブログに画像をアップロードする、というものは一応できたのですが、
chromeで画像のURLを取得するといった、
ブラウザ上の処理はjavascriptと思うのですが、
javascriptでもしURLを取得できたとしても、PHPの側に変数をどう受け渡せばよいのか
調べてもはっきりわからない状態です
そもそもの言語も大体javascriptとかPHPあたりでよいと思うのですが、
どうすればうまくいきますでしょうか…。 >>958
いえ、認められているフリー素材のみです!!
javascriptでサーバーにアップロードうんぬんというそういうものは出来ないし、
PHPでブラウザ上のものを色々操作したりデータ取得等できないし、
ここをどう融合するのか…という
クリップボードを利用して変数の出し入れ、など思ったのですが
そこもよく分からず・・
しかし、画像右クリック、デスクトップ等に保存、
それぞれの自分のブログで画像アップロードボタン系を押して、画像を選択して、
などここは絶対にプログラミングの知識がすごく使える場面だと思うのですが…。 //JS側
fetch('PHPのURL', {
method: 'POST',
mode: 'cors',
body: new URLSearchParams({url: '画像のURL'}),
});
//PHP側
header("Access-Control-Allow-Origin: *");
$_POST['url']; //これが画像URL >>953
変数名や関数名に一貫性があるかとか
複雑なプログラムのデザインが正解かどうかなんてプロでも簡単にはわかんない
メンテしやすいかどうかとかムード。 javascripter()らしいお粗末な回答どうもw http://webings.net/js/dentaku/
このソースコードのjavascriptの部分の流れが良く理解出来ません
1.
if(val >= 0 && val <= 9) { // 電卓に表示する数列を作成
if(flag == 0) {
disp = val;
disp2 = "0";
flag = 1;
}
else {
disp = disp + val;
disp = parseFloat(disp);
}
数字のボタンを押した際の処理内容はここですよね?
どうして129と連続で入力した際は出力に129と出るのですか?
何故毎ループでdispが1→2→9と上書きされていかないのですか?
2. else {
if(disp) の部分
if(disp)は何を判定してるのですか?
switch(flag)で計算内容を判定していますが、このflagは、このあとの処理の
if(val == "=") {}で設定されるのではないのですか?
質問多くて申し訳ないですがよろしくお願いします >>957-959
スクレイピングは、Ruby で、Selenium WebDriver を使う。
静的なページなら、Mechanize
ブラウザで、ページの画像を右クリックすると、画像のURL がわかるとかは、
ブラウザのプラグインを使わないと無理だろ >>963
こういう、1行ずつ説明していない、日記のような、
他人に教えていない、サイトを見たらダメ
他人のプログラムを解析するのは、自分で書いていないから、やたらと時間が掛かるし、
その割には、自分で書いていないから、いくら分析しても、自分の力が向上しない
他のサイトを見て、1行ずつ自分で書いて、実行して確かめながら、勉強すべし 下のコードを実行するとnが9000超えると
Uncaught RangeError: Maximum call stack size exceeded
というエラーがでるのですがどうすればいいのでしょう?
7万回くらい回したいんですが。。。
var locateBalls = (n, array, func, ) => {
if (n > 8900) {
//console.log(balls)
return balls;
} else {
//console.log("n: "+ n)
//console.log("x: " + ball.x + " y: "+ ball.y)
return locateBalls(n+1, func(), func);
}
}
locateBalls(0, balls, createBall) >>963
dispっていうのはおそらくdisplayの略
画面に表示されている文字列
valっていうのはおそらくvalueの略
現在入力した文字
> disp = disp + val;
文字と文字を+すると、くっつく。
例えば "a" + "b" だと"ab" になる
よってこの行で、画面が "1" で入力が "2" だと
dispには"12" がはいる。同様に"9"を押すと "129" となる
> if(disp)は何を判定してるのですか?
正直言ってぱっと見じゃ分からん。
+−×÷押した時にdispが空になってるから
それ以外の時に処理するものなんだろうけど
なんでこんな判定になるのか。そもそも普通の電卓は画面が空白に
なったりしない。直感的でないので分からんし、
クソコード(俺ならこんなコード書かない)なんで読み解きたくもない
>>965も言ってるけど、これは自分で勉強して、こんなの作ってみましたって
だけなんで勉強には不適切 どうしても動きを知りたいならローカルで実行するとか、
https://jsbin.com/ とか https://jsfiddle.net/ とかに貼り付けて
書き換えて違いを見てみたら? >>966
ちなみに公開とかするコードじゃないので自分の環境だけでできればいいです。 >>966
>どうすればいいのでしょう?
7万も再帰させない方法を考えればいいでしょう >>961
同意
設計まで踏み込まにゃならんからな
逆にいえば一目見ただけで判断出す奴は
歴史に残る程の大天才か、もしくは人間未満のクズ >>966
JavaScript には、末尾再帰が無いのか?
末尾再帰すると、スタックに積まずに、
while loop の形に展開してくれる最適化
それか、スタックサイズを大きく設定するとか。
ただし、swap が起きて、すごく遅くなるかも >>971
出来の良さにコードの質は関係ないよ
逆にコードの質が良いことをアプリの出来が良いとは消して言わない >>972
あるがまだSafariくらいしか実装していない ecmaの仕様に入ったから末尾再帰はいずれすべてのブラウザに実装されるがあえて言いたい。
末尾再帰は甘え。
なぜ末尾再帰にするのか?
それはブラウザでループに置き換えられるから。
そんな志と抽象レベルの低いこと考えながら使うくらいなら再帰なんてやめちまえ。
再帰はアルゴリズムをスマートに書き表せるから素晴らしいのだ。
forループに変換できるかどうかは関係ない。
それが目的なら最初からfor書け。 要らないところでむやみやたらに再帰使っても可読性が落ちるだけ フォルダ内のサブディレクトリ含むすべてのファイルの列挙とか、ツリー構造扱うときは再帰使わないと逆に分かりにくい。
何でもかんでも可読性が落ちると言ってるバカは自分が理解できないから貶めてるだけ。
分からないのお前だけだよw コード中のハンドラ登録部分が探しにくいのですが
いい方法はありませんか?
だらだら長いメソッドチェーンになって関数単位になっているわけではないので
何で検索したらいいのか?ってなります なれると再帰による反復のほうがシンプルで読みやすいのに なれるも慣れないも再起なんて意識するようなものではないと思うがな くっだらないマウントw
意識しなくてよかったならわざわざ言うまでもない。
慣れなかったなら慣れればいいだけ。
それだけのこと。
俺様は賢いから慣れるもなにも意識したことなんてない!ないんだ!聞いて聞いて!誉めて讃えてーっ、てかwww >>977
それは「再帰しなきゃできない」じゃない?
あれ?できるか、まぁ泥臭いこと書きたい初心者はほっときましょう。 >>980
そりゃ980は頭いいのかもしれないけどな
普通プログラムはじめて再帰処理ってのはこんがらかるポイントだと思うよ
自分で自分を呼ぶ?なんじゃそりゃー つってな
あと三項演算子とか正規表現 JavaなりCなりどっちだったか忘れたけど
サブディレクトリ漁りとかで再帰覚えたっけな
JavaScriptだと……なんかいい例が思いつかん
入口がJavaScriptだと再帰を勉強する材料が少ないのかも >>965
>>967
ありがとうございます
自分で1から考え直しているのですが、
var operatpr に"+"や"x"を入れた際に、
switch(operator)
とやるのは面倒くさいので、
ans = parseInt(disp) operator parseInt(disp)
みたいにする方法有りませんかね? >>985
追記
文字列で全部連結してevalで実行するような感じです(ただ、evalは使いたくないです) 動的型付言語ウザすぎる
Int型じゃねーのかよお前死ね なんで、stringはval.toString()なのに、intはval.toInt([radix])じゃなくてparseInt(val[, radix])なんですか
統一性がない 文字列は文字列で
parseInt("0"+variable, 10)なんてキモい書き方しないとNaNになるクソ言語 >>957
あえて省いてるのかも知れんけど
もし拡張機能の使用を前提にしてるならそう書かないと答えようが無いよ >>989
parseInt("123") で 123 になるが?w parseInt('123'); // int 123 妥当
parseInt('0123'); // int 123 わかる 頭が0な文字列でも第2引数省略しても8進数扱いされなくなった
parseInt('abc'); // NaN わかりたくないけど、100歩譲ってわかるとしておこう
parseInt('abc123'); // NaN クソが
parseInt(''); // NaN shine よく分からんが、abcという文字列も数値に変換しろ!
って言ってんのか? c++やjavaで文字列値・整数値のキャストに面倒があっても許容できる
php 柔軟
js クソ jsは動的なのがそもそもゴミ
キャストが面倒くさいのもゴミ >>994
いや、数値以外の文字が入っていても
無視するほうがおかしいだろw っていうか、 parseInt('123abc');
これ123になるじゃん。
C言語のatoiと同じ仕様なはずだぞ?
http://hitorilife.com/atoi.php このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 42日 7時間 16分 59秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。