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

私的良スレ書庫

不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

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

JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニュー
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
レスフィルター : (試験中)
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
252 : Name_Not - 2019/03/07(木) 12:28:15.90 ID:???.net (+57,+29,-8)
そもそもjavascript動かしただけで犯罪になるのが日本だからな
逮捕されることを覚悟してやるしかねえわ
253 : Name_Not - 2019/03/07(木) 13:38:59.97 ID:RgmxSmXK.net (+9,-30,-277)
replace用の第1引数と第2引数のペアをまとめてオブジェクトに入れておいて呼び出したいのですけど
どんな感じでやるんですかね

今だと
const regObj = { 'a':正規表現, 'b':正規表現, 'c':正規表現 ];
const strObj = { 'a':文字列, 'b'文字列, 'c':文字列 };
const index = 'c';
text.replace(regObj[index], strObj[index]);

って別々の配列使っちゃってるんですけど
まとめたほうがわかりやすいだろうなと

一応
const regStrObj = {
 'a' : [ 正規表現, 文字列 ],
 'b' : [ 正規表現, 文字列 ],
 'c' : [ 正規表現, 文字列 ],
};
const arr = regStrObj['c'];
text.replace(arr[0], arr[1]);
って方法は思いつくものの、なんかもっといい書き方があるような気がして
254 : 251 - 2019/03/07(木) 13:41:14.14 ID:???.net (-11,-30,-16)
>>253の最初のconstの行の末尾は ]; じゃなくて }; です…
255 : Name_Not - 2019/03/07(木) 13:46:09.53 ID:/wM/uMMX.net (+14,+29,+0)
ゼビオ行きたい
256 : Name_Not - 2019/03/07(木) 15:42:08.00 ID:???.net (-5,-30,-171)
>>253
こんなんは?てきとうだけど。
const replaceRules = {
 'a' : [ 正規表現, 置換文字列 ],
 'b' : [ 正規表現, 置換文字列 ],
 'c' : [ 正規表現, 置換文字列 ],
};
const replaceByRule = rule => str => str.replace(...rule);
使い方
const replaceByRuleC = replaceByRule(replaceRules['c']);
const replacedText = replaceByRuleC(text);
または
const replacedText = replaceByRule(replaceRules['c'])(text);
257 : Name_Not - 2019/03/07(木) 20:34:22.92 ID:???.net (+53,+29,-19)
>>253
もっと柔軟に考えな
定義はできるだけシンプルのほうが良い
アクセスは構造化されていたほうが良い
この2つは両立できる
258 : Name_Not - 2019/03/07(木) 21:22:34.99 ID:???.net (+30,-29,-24)
本来順序がないものに配列使うのは好きじゃないなぁ
だからArray#entries/Object.entriesとかも好きになれない
259 : Name_Not - 2019/03/07(木) 22:01:19.13 ID:???.net (+61,+29,-4)
entiries系は走査が目的で順序なんて気にしないことの方が多いでしょ
260 : Name_Not - 2019/03/07(木) 22:22:19.75 ID:???.net (+6,-29,-6)
>>259
key/valueを配列で持ってるでしょ
そのことよ
261 : Name_Not - 2019/03/07(木) 22:32:00.21 ID:???.net (+31,-29,-2)
[key, value] of entries
とかすりゃいいだけじゃん
262 : Name_Not - 2019/03/07(木) 22:35:49.82 ID:???.net (-10,-29,+0)
>>253
new Map
263 : Name_Not - 2019/03/07(木) 23:01:32.97 ID:???.net (+93,+28,-30)
>>261
多分もうそれが嫌なんじゃない?
jsのArrayオブジェクトを静的型付け言語の配列と同じように考えてるっぽい
264 : Name_Not - 2019/03/08(金) 01:30:24.56 ID:???.net (+138,+27,-13)
>>263
え、違和感ない?一ミリも?
他にもMapに配列リテラル与えるのも違和感あるんだが
265 : Name_Not - 2019/03/08(金) 06:59:30.07 ID:???.net (+66,+29,-13)
>>264
全く違和感ない
むしろ、>>253で無駄にキーを定義しているのが気になる
配列はキーがインデックスになっただけ
266 : Name_Not - 2019/03/08(金) 07:22:04.29 ID:???.net (+81,+29,-78)
>>264
> 他にもMapに配列リテラル与えるのも違和感あるんだが
「違和感がある」がキーのことか、引数に二次元配列を渡していることか、わからんが、既にある定義に違和感があるなら、Mapを漠然と理解している気になってるからなんじゃないかね
イテレータとか、理解してるか?
267 : Name_Not - 2019/03/08(金) 12:39:13.11 ID:???.net (+69,+29,-67)
ま、好みの問題だし[0],[1]のアクセスに全く違和感ないなら分かり合えんのでいいわ
デストラクチャリングできるから良いって問題じゃないし
ただesには妥協の産物もあるってことは理解しといたほうがいいぞ
268 : Name_Not - 2019/03/08(金) 12:43:32.37 ID:???.net (+57,+29,-23)
jsが妥協だらけなんてことは大前提の上での話だと思うけど……生まれからして開発者と会社間の妥協の産物やないか
269 : Name_Not - 2019/03/08(金) 12:53:34.47 ID:???.net (+57,+29,-12)
すべての言語が妥協だらけなんてことは大前提の上での話だと思うけど……
270 : Name_Not - 2019/03/08(金) 12:58:23.28 ID:???.net (+52,+29,-6)
我が人生に一片の妥協なし!
271 : Name_Not - 2019/03/08(金) 15:23:48.72 ID:???.net (+3,-30,-65)
ちなみにリリースしたてのreact hooks apiの使用例:
const [count, setCount] = useState(initialCount);
5ちゃんのスーパーハカーによると妥協の産物である。
272 : Name_Not - 2019/03/08(金) 22:50:57.61 ID:???.net (+57,+29,-14)
だからそれもデストラクチャリング前提の妥協の産物でしょ
273 : Name_Not - 2019/03/08(金) 22:57:47.68 ID:???.net (+57,+29,-21)
メモリ上に並ぶんだからどうやったって順序があるだろ
274 : Name_Not - 2019/03/09(土) 09:28:00.16 ID:???.net (+57,+29,-13)
違和感ある/なしの感想だけを求めて理由はどうでも良かったのか
すぐ共感を求める女性のような考え方だな
275 : Name_Not - 2019/03/09(土) 10:13:36.21 ID:???.net (-1,-29,-49)
これか?
 'a' : [ 正規表現, 文字列 ],

key が文字列で、value がコンテナなんて、
JSON なんか、ほとんどこればっかりだろ

違和感なんて感じないけど?
276 : Name_Not - 2019/03/09(土) 10:17:40.04 ID:???.net (+57,+29,-4)
Mapや配列にした途端に違和感があるという不思議ちゃん
277 : Name_Not - 2019/03/09(土) 10:56:59.23 ID:???.net (+59,+27,-16)
>>258はPHPの連想配列にも不満をいいそう
278 : Name_Not - 2019/03/09(土) 11:49:05.06 ID:???.net (+12,-30,-123)
>>267
考え方が狭いだけだと思うよ
[a,b],
[c,d],
[e,f]
って
_ key val
0 a b
1 c d
2 e f
のような項目名が暗黙のテーブルってだけなんだよ
なんか配列というものにへんな固定観念を持ってるから違和感を感じるだけなんだよ
定義はシンプルな方が良いんだからさ
{key:'a',value:'b'},{key:'c',value:'d'},{key:'e',value:'f'}
みたいにするよりは配列を使ったほうが良いんだよ
別に[a,b],[c,d],[e,f]と書いて置いてオブジェクトに変換して使うとかも簡単にできるんだからさ
そのへんが内部的にも行われてると考えればいいだけで変なこだわりを持っても価値がないんだよ
279 : Name_Not - 2019/03/09(土) 13:14:08.88 ID:???.net (+57,+29,-24)
元は順序がどうとか言ってたから、arr[3]みたいな順序に依存したアクセスが気にくわないと言うのならわかる
280 : Name_Not - 2019/03/09(土) 13:15:16.54 ID:???.net (-1,-29,-36)
そもそも、new Mapの引数にはiterableが指定可能で配列限定ではないんだが
281 : Name_Not - 2019/03/09(土) 13:20:11.46 ID:???.net (-1,-29,-8)
o = { a:'b', c:'d', e:'f' }
new Map(Object.entries(o))
でいいじゃん
282 : Name_Not - 2019/03/09(土) 17:50:19.98 ID:???.net (+57,+29,-17)
iterableの考え方が出来てない人が「妥協の産物」と断じているだけだろう
283 : Name_Not - 2019/03/09(土) 18:29:25.30 ID:???.net (+52,+29,-11)
本人も両親の妥協の産物なのです
284 : Name_Not - 2019/03/09(土) 23:39:17.89 ID:???.net (+38,-30,-133)
一週間前に始めた超初心者です。

htmlファイルと外部読み込みjavascriptファイルをPCで作り、スマホに送ってクロームで開いたところ、
htmlは表示されましたが、どうしてもjavascriptがうまくいきません。なぜでしょうか?
(スクリプトをhtmlに直接書き込むと動作するので、外部読み込みファイルの指定の仕方が悪いと思っています。)

【外部ファイル指定部分】
<a href="./time.html" target="frame_name" >現在時刻</a><br>
<iframe name="frame_name" width="200" height="50" ></iframe><br>
285 : Name_Not - 2019/03/10(日) 00:12:22.00 ID:???.net (+57,+29,-1)
>>284
まず服を脱いでください
286 : Name_Not - 2019/03/10(日) 04:49:06.65 ID:???.net (+19,-30,-159)
質問です。

var x = 123;

function hello(){
var y = 456;

var button = document.getElementById("btnElement");
button.onclick = function(mouseEvent){ console.log("x="+x+",y="+y); };
}

このときyがundefinedになりますが、
クリックのイベントハンドラ内にyを渡す方法はありませんか?
287 : Name_Not - 2019/03/10(日) 06:38:27.92 ID:???.net (+10,-30,-117)
>>286
> このときyがundefinedになりますが、
button.onclick の関数を定義してるのはhello関数のスコープ
hello関数で定義しているyは参照できるはず
適当に補って試してみたが再現しない

変数のスコープ説明のためのソースっぽいけど、このソースそのままなの?
どこかtypoしてないか?
289 : Name_Not - 2019/03/10(日) 09:30:41.49 ID:???.net (+0,-30,-136)
>>287
すいません、ちょっと違いました
function(){}とvar = function(){}でスコープが違うんですね・・・

var x = 123;

var world = function hello(){
 var y = 456;

 var button = document.getElementById("btnElement");
 button.onclick = function(mouseEvent){ console.log("x="+x+",y="+y); };
}
290 : Name_Not - 2019/03/10(日) 09:53:35.90 ID:???.net (+14,-30,+0)
>>288
それならjQueryを使うと良い。単純に置き換えるだけでもここまで短くなる

function fnc(event) {
alert(event.currentTarget.value);
}
$(function() {
var btn1 = $("#btn1");
btn1.click(fnc);
var btn2 = $("#btn2");
btn2.click(fnc);
var btn3 = $("#btn3");
btn3.click(fnc);
});

一時変数を使うまでもないのでこうだな

function fnc(event) {
alert(event.currentTarget.value);
}
$(function() {
$("#btn1").click(fnc);
$("#btn2").click(fnc);
$("#btn3").click(fnc);
});
291 : Name_Not - 2019/03/10(日) 09:55:39.91 ID:???.net (+39,-30,-170)
そして根本的にやるならこう

<button id="btn1" value="1" class="btn">ボタン1</button>
<button id="btn2" value="2" class="btn">ボタン2</button>
<button id="btn3" value="3" class="btn">ボタン3</button>

$(function() {
$(".btn").click(function() {
alert(this.value);
});
});
292 : Name_Not - 2019/03/10(日) 10:44:08.26 ID:???.net (-5,-30,+0)
>>288
const $$ = q => [...document.querySelectorAll(q)]

を定義しておいて、冗長になっているところを、

$$`#btn1,#btn2,#btn3`.forEach(el => el.addEventListener('click', fnc, false))

で置き換えては?
また、

$$(['#btn1', '#btn2', '#btn3']).forEach(el => el.addEventListener('click', fnc, false))

と書くこともできるから、以下のようにすれば対象要素増やしたいときも配列にセレクタ追加するだけで対応できるよ。

const selectors = [
'#btn1',
'#btn2',
'#btn3',
'#btn4', // new!
]

$$(selectors).forEach(el => el.addEventListener('click', fnc, false))
293 : Name_Not - 2019/03/10(日) 11:24:50.09 ID:???.net (+53,+24,-33)
>>288
ボタンが一列に並ぶかどうかとか色々不明な前提条件があるので
すまんけど明確な方針は出せない
少なくとも適用する関数が全て同じfncならば、
idじゃなくてclassでまとめることをオススメする
http://jsfiddle.net/kgn91oyL/
294 : Name_Not - 2019/03/10(日) 11:36:16.09 ID:???.net (+66,+29,-25)
>>288

>>291のコードを動くようにしてみた
http://jsfiddle.net/r38gt724/

更に一行で書いてみた。
個人的にはアロー関数は戻り値を使うべきだと思ってるので好きではないが
http://jsfiddle.net/pm4cqf75/
295 : 286 - 2019/03/10(日) 15:33:27.62 ID:Ny88Q30p.net (-20,+29,-35)
>>289-294
ありがとうございます
様々な書き方があって勉強になります
jQueryはまだ名前を知っている程度なのですが、とても興味を唆られました
296 : Name_Not - 2019/03/10(日) 15:35:20.25 ID:???.net (+33,+8,+1)
>>290-294でした
297 : Name_Not - 2019/03/10(日) 16:00:41.96 ID:???.net (+6,-29,-21)
>>288
個別ボタンにaddEventlistenerするのではなく外側の要素でイベント取ってclass等で判別するとか
http://jsfiddle.net/o3s2mwp9/
298 : Name_Not - 2019/03/10(日) 17:11:57.07 ID:???.net (+3,-30,-54)
>>288
var btn1 = document.getElementById("btn1");
などはまるごと省略してよい
id属性をもつ要素はそのままグローバルプロパティとして現れる決まりがある
299 : Name_Not - 2019/03/10(日) 17:22:18.21 ID:???.net (+3,-30,-181)
>>297と同等のことをjQueryであるとこうなります。

document.getElementById("buttons").addEventListener("click", ev => {
 if (ev.target.classList.contains("btn")) {
  alert(ev.target.value);
  }
});



$("#buttons").on("click", '.btn', function(event) {
 alert(this.value);
});

http://jsfiddle.net/3t1nv7kq/
300 : Name_Not - 2019/03/10(日) 19:26:50.44 ID:???.net (+92,+27,-18)
デザイナーってJavaScriptどらくらい理解してればいい?
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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