X



+ JavaScript の質問用スレッド vol.131 +
■ このスレッドは過去ログ倉庫に格納されています
0001Name_Not_Found
垢版 |
2017/11/21(火) 21:58:33.01ID:???
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にして見えないようにしてください。文句をつける=荒らしです
0237Name_Not_Found
垢版 |
2017/12/15(金) 01:37:08.42ID:???
var aaa=undefined;
とのか変数にundefinedを入れるって文法的に正しいのでしょうか?
undefinedって変数未定義のときにwebコンソールとかで出ると
考えているため、変数に代入することはないと思ってんですけど
どうなのでしょうか?
0238Name_Not_Found
垢版 |
2017/12/15(金) 01:52:06.85ID:???
文法的には問題ない NaNとかと同じ
ただ変数に直接入れるような使い方が相応しい場面はかなり少ないと思う
0239Name_Not_Found
垢版 |
2017/12/15(金) 02:28:46.69ID:???
undefined は、JS の実行環境が使うもの

プログラマーが使うのは、null
0240Name_Not_Found
垢版 |
2017/12/16(土) 20:43:37.18ID:G0N7qOwo
すいません、正規表現について教えてください

メールアドレス判定の許可として下記条件にプラスして
/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/
空(何も無い)も許可として追加したいのですが
どのように書いたらよいでしょうか・・
0241Name_Not_Found
垢版 |
2017/12/16(土) 21:32:25.56ID:???
/^(^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$)?$/
出来なくもないけど非常に分かり辛い
文字列長0で分岐させたほうが良さそうな気がする
0242Name_Not_Found
垢版 |
2017/12/16(土) 22:03:00.98ID:???
>>240
正規表現をそのまま使うやつは馬鹿
名前をつけて使え

名前というのは関数名のことだ。

function is_email(email) {
 正規表現チェック
}

空を許可するんだろう?

function is_email(email) {
 emailが空なら return true
 正規表現チェック
}

こうすればよかろう
0244Name_Not_Found
垢版 |
2017/12/17(日) 18:24:28.70ID:???
質問です

環境はvagrantでubuntu16.04を使用してます

vue-cliを使ってるんですけどnpm run buildしてlocalhost:8080にアクセスできません。
ポートフォワーディングは8080→8080で設定しています。

http_proxyも設定しています。

ローカルホストからアクセスする方法を教えてください
0246Name_Not_Found
垢版 |
2017/12/20(水) 22:43:03.65ID:aEN4Dhcy
buttonをclockすると、現在値を取得し、
lat(緯度)、lng(経度)、distance(距離)をgetパラメータとして渡し、同じページに遷移したいと思っています
・lat(緯度)、lng(経度)はgetCurrentPositionの引数のfunctionから取得
・distanceはbuttonタグの属性から取得。
例)<button data-distance="1000">

lat(緯度)、lng(経度)はは取得できましたが、distanceは取得できませんでした
何故でしょうか?


$(function(){
$("button").click(function(){
navigator.geolocation.getCurrentPosition(
function(pos){
var crd = pos.coords;
var url = location.href;
url = url.replace(/\?.*$/,"");
window.location.href = url +'?lat='+ crd.latitude + '&lng=' + crd.longitude+ '&distance=' + $(this).data('distance');
},
function(){
console.log('error');
}
);
});
});
0248Name_Not_Found
垢版 |
2017/12/20(水) 22:50:44.82ID:aEN4Dhcy
>>247
高速回答ありがとうございます!
もうちょっと考えてみます
0249Name_Not_Found
垢版 |
2017/12/20(水) 22:51:32.51ID:???
$(this).attr
でええやろ
dataはキャッシュかなんかですげー使いにくいぞ
0250Name_Not_Found
垢版 |
2017/12/20(水) 22:58:53.90ID:aEN4Dhcy
スコープの問題と分かりました
こういう場合はどう解決すればいいんでしょうか?
グローバル変数にする、DOMにclassをつける、などが思い浮かびましたが違う気がしてなりません
お助け下さい・・・
0251Name_Not_Found
垢版 |
2017/12/20(水) 23:14:05.38ID:???
$(function() {
 $('button').click(function() {
  var distance = $(this).data('distance');
  navigator.geolocation.getCurrentPosition(
   function(pos) {
    var crd = pos.coords;
    var url = location.href.replace(/\?.*$/, '');
    window.location.href = url +'?lat='+ crd.latitude + '&lng=' + crd.longitude+ '&distance=' + distance;
   },
   function() {
    console.log('error');
   }
  );
 });
});
0252Name_Not_Found
垢版 |
2017/12/20(水) 23:18:10.18ID:???
答を書きはしたがな、これは、
0253Name_Not_Found
垢版 |
2017/12/20(水) 23:20:49.27ID:???
>>251
なるほどー!なるほど!ありがとうございます
jsって難しいですね
0255Name_Not_Found
垢版 |
2017/12/21(木) 00:01:56.80ID:???
locationの部分、これでいいのかな? あまり$.paramって使わんのよね

$(function() {
 $('button').click(function() {
  var distance = $(this).data('distance');
  navigator.geolocation.getCurrentPosition(
   function(pos) {
    var crd = pos.coords;
    window.location.search = $.param({lat: crd.latitude, lng: crd.longitude, distance: distance});
   },
   function() {
    console.log('error');
   }
  );
 });
});
0256Name_Not_Found
垢版 |
2017/12/21(木) 00:19:46.53ID:???
>>249
attr使うぐらいなら、<input type="hidden" name="distance" value="1000> だな
なぜかって? GETのパラメータだからだよ

現在地の取得をどうにかできるならば、HTMLだけでこれで実行できるでしょ?

<form>
<input type="hidden" name="lat" value="?">
<input type="hidden" name="lng" value="?">
<input type="hidden" name="distance" value="1000">
<input type="submit">
</form>

これにJavaScriptで現在地を入れ込むという処理を割り込ませると考える
0257Name_Not_Found
垢版 |
2017/12/21(木) 00:23:35.43ID:???
例えばこんな感じ

$(function() {
 $('form').on('click', ':submit', function(event) {
  var form = event.delegateTarget;
  event.preventDefault();
  navigator.geolocation.getCurrentPosition(
   function(pos) {
    var crd = pos.coords;
    form.lat.value = crd.latitude;
    form.lng.value = crd.longitude;
    $(form).submit();
   },
   function() {
    console.log('error');
   }
  );
 });
});

コードを短く出来たわけじゃないけど
HTMLだけで動くことを確認して、その続きで
処理を加えていくという作り方ができる
0258Name_Not_Found
垢版 |
2017/12/21(木) 07:48:48.11ID:???
現在地の取得はhttpsにしないとエラーが出るゾ
気づいたら昔作ったサービスが動いてなかったゾ
0260Name_Not_Found
垢版 |
2017/12/24(日) 23:49:35.67ID:???
ここは、JavaScript のスレです

Java ではありませんので、スレ違い!
0261Name_Not_Found
垢版 |
2017/12/26(火) 05:01:29.75ID:???
動画サイトを見ていて、動画ページでコメントだけを見たいときとかに、ページを軽くしようとして

$("video").remove();
とか
$("video").parent().remove();
とかするのですが、これだと音声は再生されたままになってしまいます

コントローラーは消えるので音声を止められないし、ミュートだとちょっと重くなりそうなので
ムービー関係のもの全て消す方法ってないでしょうか?
例サイトはYouTubeです
0262Name_Not_Found
垢版 |
2017/12/26(火) 09:27:00.46ID:???
再生を止めればいいだけで消す必要なくない?
0263Name_Not_Found
垢版 |
2017/12/26(火) 13:35:26.16ID:???
>>261
pause() を使うとか、src属性を無効なURLに設定するとか
0264Name_Not_Found
垢版 |
2017/12/26(火) 18:42:35.36ID:???
>>261
for (var video of document.querySelectorAll('video')) {
video.pause();
video.parentNode.removeChild(video);
}
0265Name_Not_Found
垢版 |
2017/12/26(火) 18:48:41.82ID:???
>>262,264
再生を止めても、裏では動画や音声は読み込まれてるので、やっぱり結構CPUメモリ食べちゃうんですよね

>>263
無効なURLにするの良さげですね
ありがとうございます
0266Name_Not_Found
垢版 |
2017/12/26(火) 20:46:29.51ID:???
は?PentiumDでも使ってんの?
0267Name_Not_Found
垢版 |
2017/12/26(火) 21:33:20.14ID:???
まあ環境は人それぞれだから
0268Name_Not_Found
垢版 |
2017/12/26(火) 23:15:45.24ID:???
>>261
一時期軽くしたいと思っていたときは、
そういったものは原則OFFで、必要なときだけ再生するようにしていたな
昔はProximitronでHTMLを書き換えて実現していた、
比較的最近はブラウザの機能でFlashを自動的に再生しないようにしていた

もしかしたらブラウザに動画を自動的に再生しないような
設定があるんじゃないかな?
もし今の俺が同じことをやろうとしたら、ブラウザのプラグインである
TampermonkeyかStylishを使うかな? 実現できるか知らんけど
0269Name_Not_Found
垢版 |
2017/12/26(火) 23:27:25.73ID:???
おみとろん懐かしいな
今ならTampermonkeyだろうけど

本気でコメントだけ読みたいならapiを叩くという手もある
0270Name_Not_Found
垢版 |
2017/12/27(水) 17:13:45.73ID:???
EcmaScriptという言葉はES5あたりから良く聞くようになったと思いますが
それより前のES3相当のJavaScriptも、
EcmaScriptの標準を参照して作られていたのでしょうか?
0272Name_Not_Found
垢版 |
2018/01/05(金) 15:14:20.79ID:???
ショッピングサイトにビットコイン決済を導入した際に、価格表記をビットコイン、マウスを重ねたら円表記が出るシステムを外注したいのですが、JavaScriptで大丈夫でしょうか?
0273Name_Not_Found
垢版 |
2018/01/05(金) 19:50:26.20ID:???
>>272
できるよ
マウスオーバーで表示変わるのはJavaScriptの得意とするところだから問題ない
単純なのならCSSでもできる
リアルタイムな相場の取得はAPIでできる
仮想通貨の各取引所がAPIを公開してるからそれ使えばいい
取引所によって取得の仕方や形式が違うからその辺は好みかな
ずっと提供されるかは保証ないからいくつかをフェイルオーバー的に作っておいた方がいい
0274Name_Not_Found
垢版 |
2018/01/05(金) 20:07:44.63ID:???
>>273
事細かにありがとうございます。
プログラミングの知識はないのですが、外注に当たって方向性だけでも確認したかったので助かりました
0275Name_Not_Found
垢版 |
2018/01/06(土) 00:41:01.92ID:???
HTMLは初級ぐらいでJavaScript(TypeScript)も普通ぐらいには使えるようになって、
Reactも使えるようになったのですが、目的のUI作れません。
WPF/UWPならXAMLとコントロール使って、AndroidならレイアウトファイルとViewコントロールを使って
複雑でないUIならとりあえず普通に作ってアプリ作れるんですが。
自分のレベルだとWebアプリだとかなり死ねます。

例えば、ちょっとこの項目を右寄せ表示するにしてもできねぇーとかのレベルです。

やっぱ、CSSを覚えるしかないのでしょうか??みなさんはバリバリCSS使いこなしてるんでしょうか??
0276Name_Not_Found
垢版 |
2018/01/06(土) 00:44:40.86ID:???
>>275の続きです。
例えば、Material UIなどReact用のコンポーネントはドキュメント見れば普通には使えるようになったんですが、
タブにアイコンつけたいとか、リスト表示でこの項目を右寄せしたいとか
Reactコンポーネントのプロパティに用意されてないことやると、
とたんにダメなレベルで、UIがつくれません。
0277Name_Not_Found
垢版 |
2018/01/06(土) 06:18:30.78ID:???
>>275-276
cssも覚えないと、結局細かい事は何も出来ない

>タブにアイコンつけたい
font-awesomeのver4を使う

>リスト表示でこの項目を右寄せ
text-align:right
0278Name_Not_Found
垢版 |
2018/01/06(土) 15:00:09.67ID:???
>>275
> やっぱ、CSSを覚えるしかないのでしょうか??みなさんはバリバリCSS使いこなしてるんでしょうか??

HTMLもCSSも使いこなしてるよ。というかJavaScriptだけでやろうとしたら破綻する
基本的にJavaScriptではデザインは作らない
JavaScriptでやるのは状態に応じてclassを設定するとかそういうことぐらい
そのclassに応じてどういう見た目にするかはすべてCSSで行う
そうしないと面倒なだけだから

逆にCSSを使いこなすと処理とデザインの責任範囲が明確になるから
コードはシンプルになるし、デザインの修正も簡単になる
0279Name_Not_Found
垢版 |
2018/01/06(土) 16:26:17.74ID:???
個人的には細かいこと気になるならCanvasの方がオススメ
0280Name_Not_Found
垢版 |
2018/01/06(土) 16:54:45.33ID:???
CSS勉強します(´・ω・`)
0281Name_Not_Found
垢版 |
2018/01/07(日) 12:45:39.51ID:PY90DREO
>>234
>>235
>>236


規制で書き込めなかったけど読ませていただきました。
無事解決しました!ありがとうございました(遅)
0283Name_Not_Found
垢版 |
2018/01/08(月) 14:39:06.71ID:???
「当方のエージェントは、追跡を避けるためメールアドレスを毎週変更している。

かあわいい
0284じゃがりきん
垢版 |
2018/01/11(木) 23:10:13.35ID:ZlMal6Wd
ついに宇宙一難解なパズルが完成しました・・

その名も
『宇宙一難解なパズルゲーム』!!
http://jagarikin.html.xdomain.jp/pzl.html

htmlでできてるのでブラウザから手軽に宇宙一難解なパズルをプレイできるよ〜
0285Name_Not_Found
垢版 |
2018/01/11(木) 23:52:10.05ID:???
5年ぶりに触り始めたんですけども、
var不要論ってなんすかね?
0286Name_Not_Found
垢版 |
2018/01/12(金) 06:53:35.21ID:???
let, constが使えるならvarで宣言する意味はない(少なくともletに置き換えて問題ない)
そして現状、メジャーな環境では使える
それならvarいらんよね、という主張かと
0287Name_Not_Found
垢版 |
2018/01/12(金) 20:49:25.76ID:???
コールバックの中のreturnについてお伺いします。

ttps://azu.github.io/promises-book/#promises-overview
の中の、promise-workflow.jsについてなのですが、
このサンプルコードを仮に2連続で呼び出すように改変する場合、A部分を

asyncFunction()
.then(function (value) {
console.log(value); // => 'Async Hello world'
return asyncFunction()
}).then(function (value) {
console.log(value); // => 'Async Hello world'
})

のように書くかと思うのですが、最初のthenの中の、
return asyncFunction()のreturnは、関数を実行するだけなのになぜ必要なのでしょうか?

以前も別件でfoo.map( ( x ) => x*2 )を
foo.map( ( x ) => { x*2 } )と書いてしまい、returnでハマりました。

どなたかこのreturnのミステリーについて教えてください。
0288Name_Not_Found
垢版 |
2018/01/12(金) 21:07:47.77ID:???
>>287
> 関数を実行するだけ

ではない。
asyncFunction() は promise も返す。

2 つめの then は、その promise がresolveされたときに呼ばれることになる
0289Name_Not_Found
垢版 |
2018/01/12(金) 21:11:10.05ID:???
>>288
訂正
2 つめの then は、…

2 つめの then の中のfunctionは、 …
0290Name_Not_Found
垢版 |
2018/01/12(金) 21:26:37.01ID:???
>>289
ありがとうございます。

asyncFunction()
.then(function (value) {
console.log(value); // => 'Async Hello world'
asyncFunction()
}).then(function (value) {
console.log(value); // => 'Async Hello world'
})

この書き方では動かないのは、これではpromiseが返ってこないということです…かね?
説明が下手で本当に申し訳ないです。
0291Name_Not_Found
垢版 |
2018/01/12(金) 21:28:31.31ID:???
Promiseのthenメソッドが返すPromise Tはthenメソッド中でPromise Rを返した場合
Rの解決を待って、その解決値を持ってTが解決されることになる
つまり実質的にT==Rと言うように振る舞わせることが出来る
つまり、
非同期A .then( Aの解決値を得て、別の非同期Bを実行 ) .then( Bの解決値を得て、別の非同期Cを実行 ) .then ......
というようにどんどんthenを繋げて行くことができる

勿論then中でそのチェーンとは独立したPromiseを作成することを繰り返してもいいが、
そうすると所謂コールバック地獄のようにネストが深くなってしまう
それを平坦化するためにこの機能がある
0292Name_Not_Found
垢版 |
2018/01/12(金) 23:00:30.24ID:???
2つめのthenで捕まえられるようにだろ。
0293Name_Not_Found
垢版 |
2018/01/12(金) 23:01:42.96ID:???
失礼、リロードしてなかった。
0295Name_Not_Found
垢版 |
2018/01/12(金) 23:45:26.63ID:???
皆さん、ありがとうございました。
ようやく納得がいきました。
0296Name_Not_Found
垢版 |
2018/01/13(土) 00:15:17.83ID:???
この流れで理解できたのか・・・?
なんか質問者も回答者もずれまくってる気がするんだが
0297Name_Not_Found
垢版 |
2018/01/13(土) 00:27:58.22ID:???
なぜか納得してるようだが、これで納得できるはずがないので勝手に説明するわ

まず基本(?)系。thenを二回続けているが、asyncFunction()は
一回しか読んでないパターン

asyncFunction()
 .then(function (value) {
  console.log(value); // => 'Async Hello world' ・・・(1)
 }).then(function (value) {
  console.log(value); // => undefined ・・・(2)
 });


(2)でundefinedになっているのは、1回目のthenで何もreturnしてないから
JavaScriptは関数で何もreturnしてない場合はundefiendになる
(Rubyなどのように最後に評価された値ではない)

次のように、thenでreturnすれば次のthenの関数の引数に渡すことができる

asyncFunction()
 .then(function (value) {
  console.log(value); // => 'Async Hello world' ・・・(1)
  return value;
 }).then(function (value) {
  console.log(value); // => 'Async Hello world' ・・・(2)
  return value;
 });
0298Name_Not_Found
垢版 |
2018/01/13(土) 00:37:04.30ID:???
>>297の例では、return valueと単なる値を返した、
単なる値を返すと、次のthenの引数になるが、
単なる値の代わりにPromiseオブジェクトを返すこともできる

function newPromise() {
return new Promise(function (resolve, reject) {
 resolve('new-promise');
});
}

asyncFunction()
 .then(function (value) {
  console.log(value); // => 'Async Hello world' ・・・(1)
  return newPromise(); // 参考 return Promise.resolve('new-promise') と書いても良い
 }).then(function (value) {
  console.log(value); // => new-promise' ・・・(2)
  return value;
 });


この場合、2番目のthenの関数の引数には、Promiseオブジェクトが渡されるのではなく、
Promiseでresolveされた値(new-promise)が渡される

もしnewPromiseがresolveするまでに時間がかかる場合は、
2番目のthenが呼び出されるまで時間がかかるということ
thenで単なる値を返した場合は、次のthenはすぐに実行される。
すぐにresolveされたのと同じだと考えればいい

このように、thenでreturnするのは単なる値でもPromiseオブジェクトでも良いという
仕様のために、Promiseを返さない単なる関数をあとからPromiseに変えても
同じように動かすことができる。同期と非同期の違いを吸収していると考えることができる。
0299Name_Not_Found
垢版 |
2018/01/13(土) 00:45:35.15ID:???
>>287でreturnしない場合、

asyncFunction() ・・・(a)
 .then(function (value) {
  console.log(value); // => 'Async Hello world' ・・・(1)
  asyncFunction() ・・・(b)
 }).then(function (value) {
  console.log(value); // => undefined ・・・(2)
 })


(a)のasyncFunction()につながってるthenの結果として
(1)と(2)のconsole.logが実行される。
(2)のconsole.logがundefinedなのは間違いではない。
なぜならthenでreturnしてないのだから当然undefinedになる

(b)のasyncFunction()は何の意味も持たない。なぜなら(b)がresolveしても
その後にthenがないので(b)の結果としては何も出力しない

returnした場合は意味が異なる。(a)の1番目のthenの戻り値はPromiseオブジェクト
そのため(b)がresolve()された後にresolve()された結果が2番めのthenに渡される。

asyncFunction() ・・・(a)
 .then(function (value) {
  console.log(value); // => 'Async Hello world' ・・・(1)
  return asyncFunction() ・・・(b)
 }).then(function (value) {
  console.log(value); // => 'Async Hello world' ・・・(2)
 })

注意として(1)のvalueと(2)のvalueは(同じ文字列だが)違うオブジェクト
(1)は(a)がresolve()された結果だが、(2)は(b)がresolve()された結果
0300Name_Not_Found
垢版 |
2018/01/13(土) 00:49:38.49ID:???
>>287

> 以前も別件でfoo.map( ( x ) => x*2 )を
> foo.map( ( x ) => { x*2 } )と書いてしまい、returnでハマりました。

これは単純な勘違いをしているだけ
{ } を省略したら return も省略できる
{ } で囲んだら return が必須
というだけの話

個人的にはアロー関数は、関数っぽく見えないのも利点の一つだと思ってるので
前者の書き方をおすすめする。 { } をつけて returnを書いて、ましてや { } の中に
複数の式や文を書くのはなんか違うと思ってる
0302Name_Not_Found
垢版 |
2018/01/13(土) 09:05:24.97ID:???
>>300
ありがとうございます。自分の納得は低レベルでした。
めちゃくちゃわかりやすかったです。精進します。
0303Name_Not_Found
垢版 |
2018/01/13(土) 20:09:36.72ID:???
>>300
お前それforEachさんの中でもおんなじこと言えんの?
0304Name_Not_Found
垢版 |
2018/01/13(土) 20:12:13.36ID:???
forEachとか使わないな。
普通はmapとか使う
0305Name_Not_Found
垢版 |
2018/01/13(土) 22:06:05.52ID:???
個人的にforEachは名前をforやeachにしなかったのが結構な失敗だと思ってる
0306Name_Not_Found
垢版 |
2018/01/13(土) 22:33:45.51ID:???
>>304
普通って何よ。お前の普通なんて知らんがな。
javascriptで副作用だけ使いたい場面なんていくらでもあるだろう。
console.log使って例示すると、
['foo', 'bar'].forEach(item => {
console.log(item);
});
map使うってお前…これをお前は
['foo', 'bar'].map(item => console.log(item));
と書くのか?
[undefined, undefined]なんて生成してなんに使うの?
なんでもかんでもmapはダメだろ。それぞれ想定されてる用途がある。
あとアロー関数の{}にreturn必須とか嘘教えんな。

複数の文を書くなと言うのもどういうことだ。
ちょっとしたcompare function書くとき、読みやすさや入力値チェック処理などで複数行になったらアローじゃなくてfunction(){}使えってこと?
どんなオレオレルールだ。わけの分からない縛りいれるのならアロー関数なんてやめたら。
['大', '小', '小', '中', '中', '大'].sort((a, b) => {
const order = ['小', '中', '大'];
return order.indexOf(a) > order.indexOf(b);
});
0307Name_Not_Found
垢版 |
2018/01/13(土) 23:07:38.78ID:???
普通こうやるからなぁ

console.log(['foo', 'bar']);
0308Name_Not_Found
垢版 |
2018/01/13(土) 23:21:26.18ID:???
おじいちゃん、配列の要素をそれぞれログするのと配列をそのままログするのは違うでしょ。
前者は
foo
bar
後者は
[ 'foo', 'bar' ]
になるでしょ。
ロシアのえんぴつ的なことが言いたいならそもそもブラウザのデベロッパーツール使えばいいでしょ。
でもそういう話じゃないから。
0309Name_Not_Found
垢版 |
2018/01/13(土) 23:25:42.43ID:???
まあ普通にこうかくだろうな
何度もconst order = ・・・を実行するのは無駄だし

const order = ['小', '中', '大'];
const data = ['大', '小', '小', '中', '中', '大'];
data.sort((a, b) => order.indexOf(a) > order.indexOf(b));
0310Name_Not_Found
垢版 |
2018/01/13(土) 23:27:40.62ID:???
>>309
ごもっともな指摘。
もっとちゃんとした例考えないとな…
0311Name_Not_Found
垢版 |
2018/01/13(土) 23:30:14.31ID:???
ちなみに最後の
data.sort((a, b) => order.indexOf(a) > order.indexOf(b));
は、order.indexOfを二回書くの無駄だと思わね?

lodash使うとこう書ける
_.sortBy(data, v => order.indexOf(v));
0312Name_Not_Found
垢版 |
2018/01/14(日) 01:12:23.56ID:???
へぇー思想違うんだなぁ。
考えてみてもこの仕様で困る例が思い付かない。
素のsortでは表現できてlodashのsortByでは無理な比較仕様ってあるのかな
0313Name_Not_Found
垢版 |
2018/01/14(日) 01:35:02.67ID:???
思想? 違いがあるとしたら
まあ何かやりたいことがあって、それを実現するためには
どういうふうに処理したらいいか?と考える人と
やりたいことがそのままコードになってないと気がすまない人の違いかな

俺は「文字の小さい順に並び替えたい」と思ってるから
コードには「文字」「大小を求める」「並び替える」この3つぐらいしか
登場してほしくないんよ。人間の思考の通りのコードになって間違いが少なくなる

一方で、並び替えるには文字と文字をそれぞれ数値化したものを比較する関数を
ソート関数に渡せば実現できるという、やりたいことを処理に置き換えてからコードにするやつもいる
処理を考えてしまうから、こっちのやり方では冗長化してしまうんだよ。それが困ることだな
0315Name_Not_Found
垢版 |
2018/01/14(日) 18:32:38.21ID:???
>>312
あり得そうな気がするが、相当なレアケースじゃないかな。事実上困らない
0316Name_Not_Found
垢版 |
2018/01/14(日) 18:37:15.54ID:???
複数の値で比較したい場合はどうすんの?
0317Name_Not_Found
垢版 |
2018/01/14(日) 23:29:09.25ID:???
>>316
こういうこと?

https://lodash.com/docs/4.17.4#sortBy

var users = [
{ 'user': 'fred', 'age': 48 },
{ 'user': 'barney', 'age': 36 },
{ 'user': 'fred', 'age': 40 },
{ 'user': 'barney', 'age': 34 }
];

_.sortBy(users, ['user', 'age']);
// => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]
0318Name_Not_Found
垢版 |
2018/01/15(月) 06:30:58.52ID:???
ライブラリ使う必要ない場面で
ここでしか見ないナントカってのを執拗に勧めるやつまだいたのか
害悪だなぁ
0319Name_Not_Found
垢版 |
2018/01/15(月) 14:39:23.27ID:???
ここでライブラリを使うって事は間違ってないと思うよ
ただsortByっていう名前での
結局ライブラリを覚えないと自明ではない振る舞いは好きじゃないし
それがこの一時で便利だとは思わない
0321Name_Not_Found
垢版 |
2018/01/15(月) 23:13:05.92ID:???
>>319
sort by というのは例えばRuby標準にも有るしよく知られた単語なんだよ

プログラマにとって、for といえば ループねって
わかるように、sort by というだけで何をするのか知ってるもの

それに対して、オレオレライブラリで勝手な名前を作ると困る
それが何をするのかわからない

同じ覚えることでも、一般的なものを覚えるのと
プロジェクト固有のものを覚えるのとでは、覚える価値が違う

lodashはよく知られたアルゴリズムをよく知られた名前で実装してるので
覚える価値が高い。たとえ使わなくても知っておいたほうが良いものばかりだよ
0322Name_Not_Found
垢版 |
2018/01/16(火) 07:49:09.00ID:???
他の言語にあるって然程重要では無いと思うけどね
特に補完が弱い動的型付け言語のJSでは
いかに他のJS周りの標準と命名規則を揃えて
振る舞いや型を想像付かせるかが大事

JSにsortByのような文化は無いのだから
なんぼRubyやらにそれがあると言われても
多くのJSerはローダッシュのsortByと覚えることになるのよ
0324Name_Not_Found
垢版 |
2018/01/16(火) 22:43:30.12ID:???
>>322
> JSにsortByのような文化は無いのだから

世界が狭いな。
あんたはJSの世界に生きてるわけか

俺はプログラマの世界に生きてるんだよ。
JSはそのプログラマの世界の一地域にすぎない
0326Name_Not_Found
垢版 |
2018/01/17(水) 09:10:46.47ID:???
>>324
それは日本人に会った時世界の挨拶だからと言ってハグするようなもんだぞ
0327Name_Not_Found
垢版 |
2018/01/17(水) 22:13:04.85ID:???
>>326
それは的はずれだな。

今言ってる世界っていうのは、広さの話をしてる
JSの世界っていうのはプログラマの世界の一部
0328Name_Not_Found
垢版 |
2018/01/17(水) 22:58:51.39ID:???
プログラマの世界も狭くね?
0329Name_Not_Found
垢版 |
2018/01/17(水) 23:20:47.83ID:???
>>328
今は相対的な話をしているので、
プログラマの世界よりも○○の世界が広い言い方をしてくれない困る
そして○○が話と全く関係ない世界だとそれは意味がない
0330Name_Not_Found
垢版 |
2018/01/18(木) 02:32:12.39ID:???
JSerの価値観っていう話でさえ既に十分に大袈裟で広い話なのに
JS質問スレにプログラマの世界(しかも一部の>>324が好きな言語限定)とか持ち込まれてもな
0331Name_Not_Found
垢版 |
2018/01/18(木) 22:44:43.52ID:???
好きな言語限定?

いろんな言語の知識を持っていると
好きな言語以外の話も持ち込むよ?

本当にあんた世界が狭いねw
0332Name_Not_Found
垢版 |
2018/01/19(金) 19:22:45.51ID:???
すんごく初歩的なことで申し訳なさでいっぱいなんですが教えて下さい

clickイベントリスナをつけた<button>や<input>があって
これをdisabled="disabled"やelement.disabled = trueでdisabledにしたとき
<button>や<input>をclickしてもイベントは発火しない

これ合ってます?この挙動普通?
0333Name_Not_Found
垢版 |
2018/01/19(金) 20:01:38.96ID:???
>>331 見てて恥ずかしい奴だな もう口を開くな
0334Name_Not_Found
垢版 |
2018/01/19(金) 21:07:59.84ID:???
>>333
断るw いくらでも言うよ?見たくない、聞きたくないなら、
俺に何かをさせるんじゃなく、あんたが自分で行動しなきゃだめだよ
0335Name_Not_Found
垢版 |
2018/01/19(金) 21:40:56.60ID:???
自演しつけえ
お前が低レベルなことはみんなわかってるからw
0336Name_Not_Found
垢版 |
2018/01/19(金) 21:42:43.07ID:???
みんなって誰?
一人何役してるの?
■ このスレッドは過去ログ倉庫に格納されています

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