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

■ このスレッドは過去ログ倉庫に格納されています
2021/11/10(水) 15:24:24.80ID:jxD2VXPG0
JavaScript を自ら学ぶ人のための質問スレッドです。
>>2-6のテンプレを読んだ上で質問してください。次スレは>>950>>2のテンプレ案(本スレで改善案があれば考慮)を元に立ててください

■質問を書く上で
(1) 煽り、コード制作依頼等、人を不快にさせる投稿はご遠慮下さい。公序良俗を守った応対を心がけてください。
(2) 他の人に迷惑をかけるスクリプトの質問はご遠慮ください。
  (ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など)
(3) 質問者及び議論を行う人はメール欄を空欄にし、名前にレス番を入れることを強く推奨します。回答者はなりすましを判断できませんので、なりすましが現れても自己責任となります。
(4) 常に自発的に調べる心構えを持ってください。
  具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。
  わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。
(5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。
(6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。
  ※必ず「問題の事象が再現されること」を確認してください。
   必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。
(7) サンプルコードに HTML が含まれる場合は http://validator.w3.org/ で [Check] してみてください。
(8) 質問を具体的かつ詳細に書くと回答を得られやすいです。>>2の質問テンプレートを活用してみてください。
(9) ライブラリ関連の質問は禁止です。関連スレにあるライブラリ質問スレで質問して下さい。
(10) 時にはあなたが望む「答え」だけでなく、「意見」などが寄せられる場合もあります。

※前スレ
+ JavaScript の質問用スレッド vol.123 +
https://mevius.5ch.net/test/read.cgi/tech/1491143438/
VIPQ2_EXTDAT: checked:vvvvvv:1000:512:: EXT was configured
2022/06/08(水) 23:56:30.69ID:7YcOaZwm0
>>757
破り捨てよう
2022/06/08(水) 23:58:50.30ID:oUrdFXCt0
どう覚えているのか知らないが、varは禁止されていない
var,let const,関数宣言を全て使いこなすのがベスト
760デフォルトの名無しさん (ワッチョイ 7fbd-k0NJ [125.198.9.64])
垢版 |
2022/06/09(木) 00:01:10.95ID:DZT4jyMC0
敢えて関数スコープを使うシーンが分からない
2022/06/09(木) 00:14:24.38ID:ilG0UUWS0
関数コードを巨大にしなければ、関数スコープで十分な局面は多い
パフォーマンスへの影響を踏まえて使い分けてるな
2022/06/09(木) 00:22:00.27ID:PLMk4iqod
バベルからトランスコンパイルしたらvarって出てくる
2022/06/09(木) 00:45:27.96ID:HJM4k0T5M
再宣言と巻き上げに関するバグを生むリスクを取ってまでvarを使う場面があるのかね
2022/06/09(木) 03:15:19.34ID:6mot2Q//d
varは初期の数ヶ月から数年の期間Netscapeでは
function F() {var v = 'v';} ;alert(F.v);// v
だった。これは今でいう
class C {static s = 's'} C.s// s

constはmozillaで99年から00年に普通にみんなに使われるようになった。ただし細部で約20年後(というか約15年後かな)の今の仕様とは違う。
あと JScript .netでもconstは使えたから、複数のプラットフォームで20年選手ということになる。

letも今のものとは細部で違うが、私は2007年初期にJS1.7で使っている。
この時期のpython化は黒歴史になっているから、comprehensionは完全に消されたな。
当初は[for (i in [0, 1, 2]) i]と書けた。これは[i for i in range(3)]のこと。
inじゃなくofになって、今はそれも消されたな。
しかし残っているものの方がむしろ多くて、let以外にも分割代入なんかもこの15年前から10年前くらいまでの黒歴史期間で導入されていた。
で、何が言いたいかというと、let要らないんだよな。だって、comprehensionでlet/const無しでレキシカルスコープ実現できてたじゃん。
だから、レキシカルで初登場時に暗黙のletでいいじゃんって思う。
2022/06/09(木) 03:19:09.76ID:e981VJmIr
javascript → varを非推奨
c# → varを推奨

これだから動的言語は欠陥なんだよな
2022/06/09(木) 10:39:24.14ID:asu6OMcO0
話の腰を折って知識の開陳したいだけならよそでやってくれるかな
2022/06/09(木) 11:47:04.96ID:gZS+KUMq0
>>766
すみません。
2022/06/09(木) 18:15:08.29ID:4vVekUOlM
最近勉強を始めた初学者です
参考書には基本的にletで記述されています
varはこんなのもあるよって感じで紹介だけだなあ
2022/06/09(木) 18:56:04.47ID:gZS+KUMq0
日本国内でjavascriptのプログラマは何人いるのでしょうか?
2022/06/09(木) 19:53:55.33ID:qJMpHUUT0
ちゃんと組めるのは50人ぐらいじゃね
2022/06/09(木) 21:13:45.42ID:ObjsHLlTr
人数でいえば300万人はいる
2022/06/10(金) 00:12:00.40ID:PVhyJTd00
>>771
ええーーーーーーーーーーーーーーーーー。
そんなにいるの?
2022/06/10(金) 00:12:53.26ID:fPak2i7g0
>>765
論拠になってねえ…
2022/06/10(金) 00:13:04.77ID:PVhyJTd00
プロで活躍出来る人は10万人位かと思っていた。
2022/06/10(金) 10:36:42.56ID:Mtfam+l2M
>>773
どう見てもネタやん
2022/06/10(金) 10:49:39.80ID:/BiTxEDsr
javascriptは初心者向けだから半日もあればマスターできるぞ
2022/06/10(金) 12:19:15.49ID:W2vGiqFG0
いや、わいは1時間でいけたな
2022/06/10(金) 13:24:03.72ID:PVhyJTd00
>>776
未だにthree.jsすら使えこなせない俺って…。

で、javascriptのプログラマーは日本国内でどれ位いる?
2022/06/10(金) 13:37:21.85ID:tfSxvHhSr
プログラマーであればjavascript使えるからほぼプログラマー人口と同じくらい
2022/06/10(金) 15:34:16.82ID:PVhyJTd00
>>779
https://hrzine.jp/article/detail/2123

日本人プログラマーは約100万人。
でもjavascriptを使いこなせている人はそんなにたくさんいるかな?
2022/06/10(金) 15:36:51.91ID:PVhyJTd00
https://xtech.nikkei.com/atcl/nxt/mag/nc/18/072100242/072100001/

国内シェアは4.4%だから大体4万4千人程度だった。
2022/06/10(金) 16:11:25.97ID:tfSxvHhSr
>>781
そもそもその統計はおかしい
一人でいくつも言語を使うのが当たり前
4.4%ってのはjavascript「しか」使えない人口だろう
ということはやはりjavascriptを使える人口は100万人に近くなる
2022/06/10(金) 16:44:02.22ID:2xPsbg+9M
そもそもオッペケにマジレスするのがおかしい
2022/06/10(金) 19:46:27.69ID:PVhyJTd00
>>782
アンケートでは、現在使っているプログラミング言語を3つまで挙げてもらった。
JavaScriptは2位。


最も使っている言語を1つだけ挙げてもらった。
上位3位で43.2%を占める。

100万人?43.2%で約4万3千人位がJavaScriptを使えるかと。
2022/06/10(金) 19:47:20.81ID:PVhyJTd00
約43万人。
2022/06/10(金) 21:29:30.02ID:tfSxvHhSr
>>785
すごい
43万人がjavascriptのスペシャリストプログラマー
残りの57万人もほぼ使えるのだろうが初心者向け言語だから重視していないんだろうな
2022/06/10(金) 21:32:15.40ID:q2HycVdQM
親でも殺されたのか?
788デフォルトの名無しさん (ワッチョイ 0310-4Aqq [180.12.82.129])
垢版 |
2022/06/13(月) 08:40:40.71ID:am3Wwq1W0
element.animate(
{
left:["100px","200px","300px","400px","500px"]
},
{duration:6000}
);
というアニメーションの場合で
leftが100px,200px・・・500pxになった毎にalert表示したいんだけどどうやればできますか?
各位置に達したら発生するイベントはないんでしょうか?
2022/06/13(月) 17:30:17.10ID:mNIVTbIq0
for(const left of ["100px","200px","300px","400px","500px"]){
await element.animate({left}, {duration:1200, fill:'forwards'}).finished
alert(left)
}

こんな感じだろうが、うちのブラウザではalertと非同期処理の相性が悪くて
期待通りには動かんな
790デフォルトの名無しさん (ワッチョイ 0310-4Aqq [180.12.82.129])
垢版 |
2022/06/13(月) 18:03:23.16ID:am3Wwq1W0
>>789d
どうもっす
awaitっていうのは何ですか?あと1200という数字はどこから来たんですか?
2022/06/13(月) 19:32:06.01ID:GwwyxVQWd
6000/5かな
2022/06/13(月) 19:38:33.43ID:i6A98kDWM
>>790
横からだけど、awaitはpromiseオブジェクトの解決(成功・失敗)まで待機する構文
1200は6000(6秒)をキーフレームの数(ループ回数=5)で割ったもの
2022/06/13(月) 21:01:30.83ID:0JGjDuiuM
>>789
理屈は分からんけどダミーのアニメーションか何かを挟むと上手くいくっぽい
https://jsfiddle.net/0c3hmbok/
2022/06/14(火) 07:59:04.85ID:QblsDI8c0
>>793
>>789の書き方だとプロミスチェーンされないからだと思います

await element.animate({left}, {duration:1200, fill:'forwards'}).finished
await alert(left)

でいけました

await element.animate({left}, {duration:1200, fill:'forwards'}).finished.then( () => { alert(left) } )

でもOK
2022/06/14(火) 11:53:12.03ID:jm08kgMyM
>>794
うちの環境だとalertにawait付けただけでは上手くいかなかったのよ
http://jsfiddle.net/m3pq6djw/
ダイアログでOK押したときに●がワープしない?
2022/06/14(火) 20:15:11.04ID:QblsDI8c0
>>795
確認しました
朝はSafariだったので
SafariとFirefoxではそもそもawaitつけなくても>>789で問題なく動く
Chromeはawaitあるなし関係なくダメ、全体をthenに書き換えてもダメ
ちなみに全てMac版です

色々試してみた感じ
Chromeはalert()のダイアログを出したタイミングで次のPromiseを実行する
画面は止まってるが計算は実行されているので、OKでダイアログ閉じた時に辻褄合わせでワープする
SafariとFirefoxはダイアログのOKボタンを押したタイミングで次のPromiseを実行する
それまで画面も計算も止まってるのでダイアログ閉じてからアニメーションが始まる
かなあと思ったりしましたが、実際のところはわからないです

まあでもChromeで動かないならダメですね
2022/06/14(火) 21:03:39.71ID:BrOck07XM
戻り値のある confirm() や prompt() ならイケそうな気がするけど、どうだろう
2022/06/15(水) 11:59:48.35ID:1XehFqTjM
>>795をawait confirmに変えてみたけど挙動は変化なし
2022/06/15(水) 13:13:12.54ID:aRosNJLd0
そりゃPromise返さないやつにawait付けたところで変わるわけないわな
chromiumのモダールダイアログの処理に問題あるんだろうね
2022/06/15(水) 19:49:56.67ID:xgXbyqQZ0
awaitの後の式の値がPromiseでない場合はPromise.resolve()に変換されるってことなので
最初はそこかと思ったんですよね
>>793がどうしてChromeでちゃんと動くのかを考えたんだけど
おそらくChromeはダイアログ出した段階でPromisebフ中身を実行しbトるけど
OKを押すまでPromiseの状態は変えないんだと思います
つまりダミーのアニメーションはすぐ実行完了するけどOKを押すまではPendingなので次に行かない
なのでPendingで返却してすぐにFulfilledになるPromiseにすりゃいいのではと思って試したら多分できた
https://jsfiddle.net/v2c7baL3/
2022/06/18(土) 17:12:37.89ID:AZEFiuqJ0
ようやく大手を振ってIEサポート拒否出来るわ
IEモードなんて知らん
802デフォルトの名無しさん (ワッチョイ b380-f2xl [202.12.244.105])
垢版 |
2022/06/20(月) 11:37:14.04ID:L+sRNCcV0
クラス内のコンストラクタについてこの認識で合ってますか?

constructor(引数){this.プロパティ名 = 値;}
1.受け取った引数は値に格納され
2.インスタンス生成することで値が「this.プロパティ名」に代入され
3.同時に「this.プロパティ名」はインスタンスに渡される。

ググれどググれどページによってニュアンスが違くて混乱しております。
2022/06/20(月) 18:00:16.96ID:HWRjc4FJ0
setInterval内でループ毎に変化するelementがあってそのelementに対してのaddEventListenerを使う場合は
イベントが蓄積されていくからremoveEventListenerでループ毎に削除する必要があるけど
プロミスは1回のイベントが実行されれば蓄積されないので削除しなくていいって聞いたけど正しいんですか?
804デフォルトの名無しさん (ワッチョイ 9710-QMhI [180.12.82.129])
垢版 |
2022/06/20(月) 18:10:56.22ID:HWRjc4FJ0
>>796
animateを関数で囲ってanimation.finished.then毎にその関数を再起呼び出しでできました
805デフォルトの名無しさん (ワッチョイ 7d80-4nyZ [202.12.244.105])
垢版 |
2022/06/27(月) 11:19:58.02ID:qD2YGrhX0
これだと、単に変数に文字列 "a" を代入しただけに思えるけど
どうしてobjのプロパティが代入されるんですか?

const obj = {a: 10, b:20};
const num = 'a';
console.log(obj[num]); // 10
2022/06/27(月) 11:47:02.50ID:VP93VLfnM
>>805
下記は共にオブジェクトのaプロパティを参照する式で、結果としてaプロパティの値が得られる

obj.a
obj['a']
2022/06/27(月) 16:22:22.11ID:Xs6h66q80
>>805
console.log(obj['a']) で同じ動作になるから
2022/06/27(月) 17:24:02.66ID:R3+dz0k/M
obj[num]のnumが評価されてobj[‘a’]になる
さらにobj[‘a’]が評価されて10になる
2022/07/01(金) 21:12:32.27ID:e3WLxABv0
varだとこのように書けるけど
if(a > 1){var b = 0;}
else{var b = 1;}
alert(b);
letだと
if(a > 1){let b = 0;}
else{let b = 1;}
alert(b);
のようには書けないので
let b;
if(a > 1){b = 0;}
else{b = 1;}
alert(b);
と書くしかないので行数が多くなるのでvarの方が使える場面もあるってこと?
2022/07/02(土) 07:53:03.90ID:ZhYOvAvRM
代入してん?
2022/07/02(土) 08:46:29.95ID:k/gTnCZpM
>>809
varは「既存コードとの互換性目的で残されているだけ」であって、利用禁止が大前提
無意味にletを使うのもやめた方がいい

例1 - 名付けあり
> const b = a > 1 ? 0 : 1;
> alert(b);

例2 - 名付けなし
> alert(a > 1 ? 0 : 1);
812デフォルトの名無しさん (ワッチョイ 3110-WqNE [180.12.82.129])
垢版 |
2022/07/02(土) 08:46:33.37ID:f8ozX99S0
代入してるよ
813デフォルトの名無しさん (ワッチョイ 3110-WqNE [180.12.82.129])
垢版 |
2022/07/02(土) 08:46:35.20ID:f8ozX99S0
代入してるよ
2022/07/02(土) 09:07:06.91ID:7+dzE5OL0
>>809
あなたにとってはそうなんだろうが、letの方が宣言か一箇所で済む分、わかりやすく感じる
最も、そのコードは三項演算子で1行に出来るから比較する必要はないが
2022/07/02(土) 14:56:48.12ID:7+dzE5OL0
とりあえず、[180.12.82.129]は何か反応したら?
816デフォルトの名無しさん (ベーイモ MMc6-A/OY [27.253.251.139])
垢版 |
2022/07/02(土) 18:09:44.92ID:5kfVxUizM
iPadでJavaScriptの勉強したいんやけど可能?
一応外付けのマウスキーボードはあって、OracleのJava bronzeを取りたいんたけど。
817デフォルトの名無しさん (ワッチョイ 3110-BrNX [180.12.82.129])
垢版 |
2022/07/02(土) 18:11:06.76ID:f8ozX99S0
>>814
そうなんですか
2022/07/02(土) 18:20:43.79ID:TQdsQirm0
var は使っちゃいけない。
スコープとか、色々とややこしいから、バグるだけ

そういうのを研究していない人には分からないし、
研究するだけ時間の無駄

varを使うな、という結論だけを使えばよい
2022/07/02(土) 18:21:59.34ID:7+dzE5OL0
>>817
結局、何を知りたかったのか
さっぱり、わからないな
2022/07/02(土) 18:35:23.42ID:6gDxbKhpM
>>816
JavaかJavaScriptかはっきりしてくれ
821デフォルトの名無しさん (ワッチョイ 7568-kc9T [112.68.214.52])
垢版 |
2022/07/03(日) 21:22:54.13ID:u2gGVzOi0
javascriptでフォーム作ってます。
java scriptからメールを送る方法ってどんなのがありますでしょうか?
2022/07/03(日) 21:32:55.50ID:W01+4hlo0
>>821
マルチポスト先でいわれたSMTPサーバは調べた?
https://mevius.5ch.net/test/read.cgi/hp/1478002550/652
https://qiita.com/ryunakae/items/0ceed3728d46ee67d1f2
2022/07/03(日) 22:51:52.67ID:qXMK1yPV0
javascriptでメールの送信は無理!

rubyを使うと簡単にできるYO!
2022/07/03(日) 23:26:54.42ID:C1pvOjRy0
AWS Lambda/SNS, Ruby など、サーバーが無いと無理
2022/07/03(日) 23:41:06.22ID:W01+4hlo0
無理といわれてるが、SmtpJSでは不可能なのか
まあ、俺もクライアントサイドでやろうとは思わんが
2022/07/03(日) 23:44:24.18ID:QHM3Cg280
ブラウザ上のjavascriptから直にメールを送る機能はないので
822のqiitaで紹介されてるSmtpJSはSmtpJSのサーバーに通常のフォームデータとしてPOSTしてそのサーバーがメール送信を肩代わりしてくれる
信用できないなら自分でサーバーサイドもどうにかする
2022/07/03(日) 23:55:04.52ID:W01+4hlo0
SMTPサーバーが必要なのは>>822の通り、理解してる
最も、質問者はずっとスルーしてるが
828メールの質問者@時の旅人 (ワッチョイ 7568-kc9T [112.68.214.52])
垢版 |
2022/07/04(月) 00:11:28.80ID:rXJjm3cQ0
皆さま、ご教示ありがとうございます。
smtp.jsを使い、SMTPサーバーはsmtp.jsで紹介されてるSMTPを使用。

試してみたのですが、うまく動かせておりません。
メールは、サーバーサイドからやるのがベターですよね、やっぱり。。
829デフォルトの名無しさん (スップ Sd12-WKon [1.75.228.186])
垢版 |
2022/07/04(月) 06:59:27.99ID:eZVYpHVcd
var yyy =~/g;
var mmm = "$1~”;
aaa[0].innerHTML = aaa_html.replace(yyy, mmm);


で指定する$1の部分は、mmmの変数で指定するか、
複数の変数を埋めるにはどうしたら良いですか?
ようするにyyy以外の変数も埋め込めたい。
2022/07/04(月) 07:44:51.83ID:158REP8JM
>>829
マッチ結果とは無関係の変数を使いたいってことなら、普通に変数を連結するなりテンプレートリテラルで表現したりすればOK
ある程度複雑なことをするつもりなら、別途置換処理用の関数を定義した上でreplace()の第二引数に渡した方が読みやすくなるかも(当然ながら「適切な名付け」が前提)

innerHTMLを使っている点については、あえて何も言わないでおく
2022/07/04(月) 08:16:00.18ID:X+I6pApT0
>>829
+で結合して代入
832デフォルトの名無しさん (アウアウウー Sa4d-uVV9 [106.146.72.72])
垢版 |
2022/07/07(木) 08:46:34.07ID:hekaiUDAa
年月を設定した2段階プルダウンを作成しているのですが、JAVAを深く触ったことがない為アドバイス頂きたいです。
wordpressのデータベースからSQLを使います。Java scriptでプルダウン作成。

設計について
Java script→JSONで$(配列)に変える→archive.php→SQL→JSON→Java scriptという流れで良いでしょうか?
2022/07/07(木) 08:56:00.01ID:sGvZpzJo0
>>832
> JAVAを深く触ったことがない

Java関係ある?

> Java script→JSONで$(配列)に変える

$(配列)とは?
834デフォルトの名無しさん (アウアウウー Sa4d-uVV9 [106.146.72.72])
垢版 |
2022/07/07(木) 09:00:19.50ID:hekaiUDAa
>>833
JAVAは変換ミスです申し訳ありません。
option valueの値をそのままSQLに渡す事が出来ないとアドバイスもらいましたので、何とかSQLに渡す方法が知りたいです。
また渡したものと一致するデータをSQLで選別してJava scriptに返す必要があります。

コードは以下になります。
<option value="">年を選択</option>
<option value="op-a">2021</option>
<option value="op-b">2022</option>
</select>

<select name="op-a">
<option value="">2021グループから選択</option>
<option value="op-a-1">1</option>
<option value="op-a-2">2</option>
<option value="op-a-3">3</option>
<option value="op-a-4">4</option>
<option value="op-a-5">5</option>
<option value="op-a-6">6</option>
<option value="op-a-7">7</option>
<option value="op-a-8">8</option>
<option value="op-a-9">9</option>
<option value="op-a-10">10</option>
<option value="op-a-11">11</option>
<option value="op-a-12">12</option>
</select>
835デフォルトの名無しさん (アウアウウー Sa4d-uVV9 [106.146.72.72])
垢版 |
2022/07/07(木) 09:04:47.61ID:hekaiUDAa
>>833
option valueの値をJSONを使い配列に変えた上でSQLに渡すことを考えておりました。
2022/07/07(木) 09:57:05.64ID:D+rw6Zs6M
>>832
一旦落ち着いて、スレタイと>>1のテンプレを熟読しよう

その上で、一連のデータフロー(処理順序と各処理間のインタフェース)の中で「JavaScriptコードに担わせたい機能」をあらかじめ明確化した上で、「同機能の実装上の不明点・疑問点」を質問しよう
2022/07/07(木) 12:45:33.04ID:ywWcbjyb0
例えば、Ruby on Rails みたいなMVC フレームワークなら、

<%= f.select :pet, [["犬", 1], ["猫", 2]], include_blank: "選択して下さい" %>

こういうselect ボックスで、猫を選べば、
データベース(DB)のpet列が、2 で保存される

多分フォーム送信で、value="2" がサーバーへ送られて、
Railsによって、自動的に整数型の2に変換されて、DBへ保存される

このように、Railsのようなフレームワークを使うと、
DBのテーブル構築とか、HTMLからDBの各列への対応付けも全自動

SQL 文を文字列で、自分で作ったりしない
2022/07/07(木) 15:15:03.26ID:1RhWyS0vd
JavaScriptってクラス宣言も関数使ってるらしいけど、関数型言語なの?
839デフォルトの名無しさん (アウアウウー Sa4d-9ZeA [106.181.212.40])
垢版 |
2022/07/07(木) 16:06:18.67ID:8vD+8lwxa
return {};
2022/07/07(木) 21:11:15.45ID:/kE53AS+0
>>838
もとはschemeを参考にした関数型言語だったのをむりやり関数型言語っぽく仕立てたから
クロージャや部分適用は普通に使えるのに対し、thisやコンストラクタやメソッドはなんか
残念な仕様になった。
2022/07/07(木) 21:11:55.11ID:/kE53AS+0
むりやりオブジェクト指向言語っぽく
だな。
842デフォルトの名無しさん (オッペケ Srf9-cwmE [126.254.152.249])
垢版 |
2022/07/07(木) 21:39:11.18ID:TVMHA1kRr
console.logが1つしか表示されないんですが、何が原因なんでしょうか?
//オブジェクトを定義するvarは受け取る際にエラーが起きそう再宣言のできるletを選択
let objA = {
// プロパティを定義
// キー: 値
year: "2021",
month: "1,2,3,4,5,6,7,8,9,10,11,12",
};
let objB = {
// プロパティを定義
// キー: 値
year: "2022",
month: "1,2,3,4,5,6,7,8,9,10,11,12",
};

//オブジェクトをまとめる
let allobj = Object.assign(objA, objB);

//JSON.stringifyとは、JavaScriptのオブジェクトや値などのデータをJSONに変換するための関数
let result = JSON.stringify(objA,objB);
//変数「result」に代入
console.log(result);
843デフォルトの名無しさん (オッペケ Srf9-cwmE [126.254.152.249])
垢版 |
2022/07/07(木) 21:40:14.54ID:TVMHA1kRr
JSON.stringifyをまとめても、let result = JSON.stringify(allobj);

console.logを2つにわけても2021のみ表示されて、2022がどうしても表示されないのですが、何か考えられる原因はありますでしょうか?console.log=JSON.stringify(objA);console.log=JSON.stringify(objB);
2022/07/07(木) 21:56:36.52ID:E4BLf8JX0
>>840
ありがとう、理解しました
いちいちコンストラクタとか宣言する気起きなかったから良かった
2022/07/07(木) 22:25:23.38ID:1JorfJ+H0
>>843
Object.assignは1番目の引数オブジェクトを直に2番目以降のオブジェクトのキー・値で上書きするものですよ

もしかして
let allobj = [ objA, objB ];
let result = JSON.stringify(allobj);
846デフォルトの名無しさん (オッペケ Srf9-cwmE [126.254.152.249])
垢版 |
2022/07/07(木) 23:19:17.49ID:TVMHA1kRr
下記のようにしたら表示されるんですが、変数「result」に代入しておく必要があるため困っております。
let result =にobjA,objB別々にすることはできますでしょうか?

//オブジェクトを定義するvarは受け取る際にエラーが起きそう再宣言のできるletを選択
let objA = {
// プロパティを定義
// キー: 値
year: "2021",
month: "1,2,3,4,5,6,7,8,9,10,11,12",
};
let objB = {
// プロパティを定義
// キー: 値
year: "2022",
month: "1,2,3,4,5,6,7,8,9,10,11,12",
};

//JSON.stringifyとは、JavaScriptのオブジェクトや値などのデータをJSONに変換するための関数
console.log(JSON.stringify(objA));console.log(JSON.stringify(objB));
2022/07/08(金) 00:03:23.67ID:PFDPpPXI0
何がやりたいのかサッパリわからん
2022/07/08(金) 00:18:12.73ID:hP3rbItM0
>>842-843,846
マルチポストか
https://teratail.com/questions/u195apv1x9xtdv
せめてマルチポストのマナーを守れ
https://ja.meta.stackoverflow.com/questions/2418/

>>832,834-835もあなただと思うが、JavaScriptを学習する前にPHPの入門書買うのが先だと思うぞ
form送信するのなら、JacaScriptもJSONも必要ない
PHP側でGETもしくはPOSTでパラメータを受け取れば良い
PHPにはパラメータを配列で受け取る仕組みがあるからな

やりたいことから逆引きするのは止めて、入門書で基礎を固めるべき
回答もらっても理解できんのなら意味がない
回答もらえるだけの明確な質問内容を書けないのなら意味がない
突っ込みどころが多すぎる
849デフォルトの名無しさん (アウアウウー Sa4d-uVV9 [106.146.74.59])
垢版 |
2022/07/08(金) 00:57:16.92ID:baa8V49za
>>848
アドバイスありがとうございます
マルチポストはすみません。

form通信ではなくSQLを使いアーカイブを表示させるためにプルダウンを作成しています。

Java scriptのオブジェクトでは配列を渡せないのでJSONでシリアライズしてPHPでデコードしてそれをSQLに渡します。
渡されたものから該当の記事を出力させ、PHPで JSONシリアライズした後にAJAXでJava scriptに送り返します。
2022/07/08(金) 01:59:04.54ID:FyHcSsdCr
teratailでのやり取りを見てても根本的に理解が足りてないのがよくわかる
プログラミング始めてどれぐらいか分からんけどもPHPとJavaScriptを組み合わせてどうこうするにはまだ早い気がする
2022/07/08(金) 09:14:14.28ID:XXTPwuyz0
>>832見てると、やり方調べてるうちに、不明点の迷路にハマってる気がする

まずは最低限の実装から順番に理解していかないと、解決するものもしないぞ
①WordPressのフロントエンド側からSQLを呼び出す
 ※SQLの内容は固定、ボタン一つで1つ結果が返ってくれば良い
 ⇒これだけならWordPressのコミュニティやサポートに聞けば解答が来る
②WordPressのフロントエンドからプルダウン経由(動的に値を変えながら)
  SQLを呼び出す
  ⇒これもWordPressのコミュニティで意見聞いてから、JavaScript側での実装を考えて確認
③以降も同じように実装領域に合わせて確認していく

プログラミングだといきなり最終系考えても
初心者だと実装の過程が滅茶苦茶になるから、まずはシンプルに考えた方が良い
852デフォルトの名無しさん (アウアウウー Sa4d-uVV9 [106.146.62.104])
垢版 |
2022/07/08(金) 14:59:56.45ID:XF8TEdVua
>>851
アドバイスありがとうございます。
objAとobjBをボタンとしてクリックさせて、それをPHP側で$識別させることになるのでしょうか?

func btnCliked(
)
let objA=[{year:2021,month:[1,2,3,4,5,6,7,8,9,10,11,12],
}]
2022/07/08(金) 15:38:46.43ID:NjcH7rpX0
>>849
謝罪するならすべきことをやってくれ
https://ja.meta.stackoverflow.com/questions/2418/

form送信しないならどうやってデータを送る?
select要素時点で文字列になってるのに、なぜJSONに変換する必要がある?
PHPでどうやって受け取る?

この辺、ちゃんと質問に起こせてないから、質問内容が伝わらなかったり、基礎的な知識不足を指摘されるんだと思うがな
2022/07/08(金) 16:38:30.47ID:XXTPwuyz0
>>852
イメージ的にはそんな感じ
ただ>>853も言っているように、フロントエンド(HTML/JavaScript)とバックエンド(PHP)で
どうやってデータの受け渡しをしているのか、っていうのを理解できてないから
本当に入門書読んで勉強し直した方が良いと思うぞ

まずは本当にシンプルに
①Wordpress上でボタンを押して、固定値で値をPHP側に渡す(formのPOST通信)をする
②PHP側で値の受け取りが出来たかを確認する
③確認が出来たら、PHP側からJavaScript側に返り値を固定値で渡す
④WordPress上に返ってきた値を表示できるか確認する

とりあえず最低限の基礎的な動作を実装して、拡張するっていうやり方しないと
この先も大変な事になるぞ
855デフォルトの名無しさん (アウアウウー Sa4d-uVV9 [106.146.60.34])
垢版 |
2022/07/08(金) 16:45:31.09ID:FYSMny9Ka
>>853
シリアライズするのはJavascript側から配列を渡せないからですよね?
PHPではJSONファイルをnode.jsで作成してそれをPHP側で取得→デコードしてSQLに渡す?でしょうか?
856デフォルトの名無しさん (アウアウウー Sa4d-uVV9 [106.146.60.55])
垢版 |
2022/07/08(金) 16:52:48.63ID:IP56XoY2a
>>854
アドバイスありがとうございます。
たしかにSQLで記事の検索をかけるならわざわざJSONを使う必要ないですかね
2022/07/08(金) 17:48:25.41ID:BhrsH9/Er
>>855
これそもそもなんで配列を渡したいの?
見たところ年も月も複数選択できるわけじゃなさそうで「2022/6」とか渡せば済む話じゃないの?
858デフォルトの名無しさん (アウアウウー Sa4d-uVV9 [106.146.60.152])
垢版 |
2022/07/08(金) 18:08:14.67ID:iDDaPeaDa
>>857
SQLから該当記事の検索をさせたいからです

RSSとSQLで交互にレイアウトを出力させているためSQLにどうしても配列を渡したいです
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況