JavaScript関連のことを調べてみた2020年03月22日

JavaScript関連のことを調べてみた2020年03月22日

魔法JS☆あれい 第8話「filterって、ほんとfindとfindIndex」

登場人物

丹生(にゅう)あれい
魔法少女「魔法(マジカル)JS(女子小学生)☆あれい」として活動中。

イテレー太
正体不明の魔法生物。

第1部「ミューテーター・メソッド編」
* [第1話「popでpushした、ような……」](https://qiita.com/8amjp/items/e44e707ccc8c95b4a40d)
* [第2話「shiftはとってもunshiftって」](https://qiita.com/8amjp/items/3fc1b2defd28ba1c2df3)
* [第3話「もうsortもreverseも怖くない」](https://qiita.com/8amjp/items/86f5294981fbebd3fe2d)
* [第4話「fillも、spliceも、copyWithinもあるんだよ」](https://qiita.com/8amjp/items/0741e35b70ea32711265)

第2部「アクセサ・メソッド編」
* [第5話「joinなんて、concatなわけない」](https://qiita.com/8amjp/items/22

元記事を表示

手数料の計算。Mathオブジェクトについてまとめてみた。

#Math
今回はMathオブジェクトのメソッドについてまとめました。
アプリで使ったのは少数切り捨て(超初歩)
今後使いそうなのを軽くピックアップ。
[![Image from Gyazo](https://i.gyazo.com/78f973143e6fbddc97740e12b0e4acd8.gif)](https://gyazo.com/78f973143e6fbddc97740e12b0e4acd8)

###Mathオブジェクトとは
Math は、数学的な定数と関数を提供するプロパティとメソッドを持つ、組み込みのオブジェクトです。
組み込みとは、JavaScript側であらかじめ用意してくれているオブジェクトのことです。Mathオブジェクトは、組み込み関数の1つで、数値計算を扱う際に使います。
Math.〇〇とすることで求めている数字を引き出したり、変換することができます!(便利)

####初心者が使いそうなのまとめ

|method|return value|example|
|——|————|——-|
|ceil|引数として与えた数以

元記事を表示

ライブラリなしでTreeTableを実装する

## 始めに

開発現場によってはjQueryやAngular等のフレームワーク、ライブラリの使用が禁止されているところがあると聞いたことがあります。また、使用するフレームワークによって実装方法がバラついてしまうことがよくあると思います。
そういった状況下でも、問題なく開発が進められるように、フレームワーク、ライブラリを一切使用せずTreeTableを自作してみました。
作成したTreeTableは[gitHub](https://github.com/yunomichawan/TreeTableView)に公開しております。

## 動作ブラウザ

・Google Chrome
・Microsoft Edge
・IE11

この3つ以外のブラウザでは未検証です。注意ください。

## ソースの準備

ソースは[gitHub](https://github.com/yunomichawan/TreeTableView)に公開しております。
構成としては至ってシンプルで下記の3つのみです。
動作確認は上記で記載したブラウザがあれば確認することができます。

・サンプル用のhtml
・j

元記事を表示

背景の見えるポップアップスクリーンの作り方

背景が見えるモーダル画面って個人的には好きです。
今回はその作成方法を紹介します。
![output.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43625/d11951e0-2431-cd72-d221-ea7e87981907.gif)

# 使用ライブラリ

– `@react-navigation/stack`
– `@react-navigation/native`
– `react-native-safe-area-context`
– `react-native-linear-gradient`
– `styled-components`

# 透過するモーダルページ(外枠)の作成

“`tsx
const TransparentModalPage: React.FunctionComponent = ({ children }) => {
const navigation = useNavigation();
return (

元記事を表示

Reactコーディングを爆速でぶち上げる方法

![React_emmet.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/573011/22cdacb1-de4b-9b60-c424-cc0941e340aa.gif)

#前置き
Reactコーディングをする時に、便利だなと感じる機能、ツールをまとめました。
コーディングスピードを爆速でぶち上げたい方向けです。(言いたいだけ)

#仕様ツール
– Visula Stadio Code
– Simple React Snippets(拡張機能)

##①VS Codeのショートカット

Reactのファイルを開いたら…

– `command` + `K` を押してから `M`

これめちゃ便利です。Reactのファイルは、デフォルトだとJavaScriptのファイルと認識されてしまいますので、Reactで使いたいSnippetsやEmmetが使えなかったりします。

##②Simple React Snippets(拡張機能)
スクリーンショット </p></blockquote>
</blockquote>
<aside class='widget widget-post'>
<div class='tag-cloud-link'>JavaScript</div>
<div class='tag-cloud-link'>snippets</div>
<div class='tag-cloud-link'>emmet</div>
<div class='tag-cloud-link'>React</div>
<div class='tag-cloud-link'>VisualStudioCode</div>
</aside>
<div><a style='width:100%;' class='btn__link' href='https://qiita.com/westhouse_k/items/18852efe8b0de7e6ccca'>元記事を表示</a></div>
<h3 id=jQueryでFlash, error_messageを閉じる方法(Bootstrap xボタンが反応しない場合)。

##はじめに
Bootstrapの`flash`,`error_messages`などに使われる
`

`
が閉じない場合の対処法です。
私の環境が悪く閉じるアクションができないのか定かではありませんが
`jQuery`を使って閉じるアクションを可能にする方法を書いておきます。

私の場合、xマークのボタンは表示できましたがクリックをしても一切反応しませんでした。

##開発環境
– bootstrap-sass (3.3.7)
– devise (4.7.1)
– jquery-rails (4.3.1)
– rails (5.2.4.1)

##Flashやerror_messagesにxボタンをつける
[こちら](https://www.w3schools.com/bootstrap4/bootstrap_alerts.asp) Bootstrap4版
[こちら](https://www.w3schools.com/bootstrap/bootstrap_alerts.asp) Bootstrap3版
上記のサイト

【LINE】LIFFアプリを試してみる~ユーザ情報の取得とトークへの送信~

## 概要

– LIFFを使ってLINEのユーザ情報の取得とLINEへのメッセージ投稿を試してみます
– [前回書いたセットアップ](https://qiita.com/ozaki25/items/5b3aedb80ab7c07618d2)が完了している前提で進めます
– [公式のスターター](https://github.com/line/line-liff-v2-starter)は特にフレームワークを使っていませんが今回は私が使い慣れたReactで試してみます

## Reactアプリの雛形生成

– create-react-appでさくっと作成します

“`sh
npx create-react-app liff-sample
“`

## LIFF SDKのセットアップ

– LIFF SDKはnpmからインストールする形式では提供されていないので使いやすいように一手間入れておきます
– `public/index.html`にLIFF SDKの読み込み処理を追加
– しれっとそれ以外も手を加えてますがそのままでも影響ありません

“`html:public/

WikipediaのAPIを使ってLINEbotに調べてもらう

# やったこと
知りたいことをLINE上で質問してすぐ返ってきたら便利だなーと思い、LINEbotさんにWikipediaの頭脳を与えてみました。
初学者なので非効率で汚い書き方をしている所もあるかと思いますが、ご了承ください!

### できたものサンプル
普通にキーワードを入力すると、URLを返してくれる。

switch文

#はじめに

switch文とは、
条件分岐を行う際の、
方法の1つです。

※もう1つは、if文です。

#switch文

まずは、記述例をご覧下さい↓↓

“`js

switch (変数) {
case 値A:
(変数が値Aの場合の処理);
break;
case 値B:
(変数が値Bの場合の処理) ;
break;
 ・・・・
default;
(変数がどの値にも合致しない場合)
}
“`

上記の記述方法により、
複数の条件分岐を定義することができます。

####内容といたしまして…

「変数が値Aの場合に処理AAを行う」
「変数が値Bの場合に処理BBを行う」
このようになっております。

1番下に記述してあります、
「default」 はどの条件にも合致しない場合を表します。
if文でいう「else」のような役割です。

JavaScriptのswitch文では、上から順に変数の値を比較していき、合致した時点で該当する処理が行われます。
ここまでは、if文と同じです。
しかし、これからが違う処理内容となっており、
それ以降に記載された処理もすべて実行されてしまう

JavaScript イベントリスナー一覧

## よく使用する 12個

load Webページの読み込みが完了した時に発動(画像などのリソースすべて含む)
DOMContentLoaded Webページが読み込みが完了した時に発動(画像などのリソースは含まない)
click マウスボタンをクリックした時に発動
mousedown マウスボタンを押している時に発動
mouseup マウスボタンを離したときに発動
mousemove マウスカーソルが移動した時に発動
keydown キーボードのキーを押したときに発動
keyup キーボードのキーを離したときに発動

Vueのデータバインディングを理解する

## どんな記事?

Vue.jsでの**データバインディング**を理解しよう!

## データバインディングとは

データバインディングとは、**データと描画を同期**する仕組み。

## テキストのバインディング

“Mustache”構文(二重中かっこ)を利用した形が基本です。

“`vuejs
Message: {{ msg }}
“`

こうすると`{{ msg }}`の部分が、対応するオブジェクトの`msg`プロパティの値に置き換えられます。

## HTMLのバインディング

`v-html`ディレクティブを使用すると、HTML文をバインディングできます。

(**ディレクティブ**とは、DOM要素に対して何かを実行することをライブラリに伝達する、マークアップ中の特別なトークン)

“`vuejs

“`

“`vuejs
data: function() {
retrun {
text: ‘Hello!’
}
}
“`

“`:出力
Hello!
“`

`p`のコンテ

React Native でいろんなメニューを持ったアプリを作る

# 最終形

– タブメニューで画面が切り替わる
– どの画面からでもアクセスできるスライドタイプのメニューを持つ
– イベントトリガーでポップアップ画面が差し込まれる

以下の動画のようになります。
![output.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43625/fbccf485-2453-805e-9d84-4c3a8b68293b.gif)

このような複数の画面パターンを持ったアプリを実装していきます。

# ナビゲーターの構成

今回の実装では、 [React Navigation](https://reactnavigation.org/) を使っています。
バージョンは v5 です。

スライドメニュー(Drawer)、ポップアップ画面はタブメニューに覆いかぶさる形で実装したいので、
DrawerNavigator > StackNavigator > TabNavigator となる構成で実装します。

それぞれの中身を見ていきます。

### DrawerNavigator

Class Component + TypeScript の Vue アプリケーションを Composition API で作り直したので思ったことを書く

# はじめに

少し前に作って、更新が滞っていたアプリケーションに機能を追加したかった。
ちょうどよかったので Vue + Class Decorator + TypeScript の構成だったが、 Vue + CompositionAPI + TypeScript に作り直した。
この記事では、その過程で思ったことや考えたことを共有したい。

作成しているアプリケーションは以下。

– ソース: https://github.com/sterashima78/vue-webpage-builder
– アプリケーション: https://sterashima78.github.io/vue-webpage-builder
– 使い方はソースについている [README](https://github.com/sterashima78/vue-webpage-builder/blob/master/README.md) を見てください

# 作り直す前

– コンポーネント定義はクラススタイル
– vue-class-componentでやってた
– Vuex もクラス

【JS/Vue】VueXの浅い理解

## 注意
VueXについては、下記の記事を読むのが一番です。
[vuexをまだ理解していない全人類に捧ぐvuexを利用したコードの図解 – Qiita](https://qiita.com/fruitriin/items/42b0ebc5f8a524a0ae17)

## VueX
### VueXの構成
– Actions
– Mutations
– State

**以下全体図**
>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148392/2549e404-5677-080e-62ec-26d271a604ec.png)
[Vuex とは何か? \| Vuex](https://vuex.vuejs.org/ja/)より引用

### 全体の流れ
1. stateを確認
2. actionを呼び出し
3. mutationsへcommit
4. stateを更新

>this.$store.dispatch(‘xxx’) でコンポーネント内でアクションをディスパッチできます。あ

Pay.jpを用いた購入機能の実装

##概要
Pay.jpを用いた購入機能の実装を備忘録としてまとめます。
修正点ありましたらご指摘お願いいたします。
Transaction(取り引き)テーブルおよびProduct(商品)テーブルをもとに作っていきます。

##前提
* Pay.jpのアカウント作成済み
* Pay.jpにてクレジットカード登録機能は実装済み
* ビューはHamlで記載
* deviseにてログイン済み

##手順

1. Transactionテーブルを作成(購入済みの場合SOLD OUTを表示させるため)
2. アソシエーションの設定
3. Transactionコントローラーを作成
4. 環境変数の設定
5. ルーティングの設定
6. マークアップ:購入内容確認画面
7. マークアップ:購入完了画面
8. マークアップ:購入済みの場合SOLD OUTを表示
9. 購入データの確認

##Transactionテーブルを作成
今回は購入済みの場合SOLD OUTを表示させるためにTransactionテーブルを作成します。

“`
$ rails g model Transaction
“`

`

【JS/Vue】ライフサイクル

主に下記のUdemyのコースをベースに書きました。
[Vue.js + Firebaseで作るシングルページアプリケーション \| Udemy](https://www.udemy.com/course/vuejs-firebase/)

## Vueライフサイクル
ドキュメントに書かれているライフサイクルの図は下記の通りです。

>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148392/3b916066-488c-d702-7565-00fab8b3699a.png)
[Vue インスタンス — Vue.js](https://jp.vuejs.org/v2/guide/instance.html)より引用

大まかに定義すると,下記の流れのようになっており、それぞれに作成前、後が存在しています。

1. Vueインタンス作成
2. マウント
3. DOM アップデート
4. Vueインタンス削除

またこのライフサイクルでは、**ライフサイクルフックで処理を追加できるようになっ

JavaScriptでカジュアルに日付操作する

JSでちょっとしたDate操作をしたのでメモ。

### YYYYMMDD文字列を取得

> toISOString() メソッドは、簡潔な拡張表記の ISO 形式 (ISO 8601) の文字列を返します。これは、常に 24 文字または 27 文字の長さになります (それぞれ、YYYY-MM-DDTHH:mm:ss.sssZ または ±YYYYYY-MM-DDTHH:mm:ss.sssZ)。タイムゾーンは常に 0 UTC オフセットになり、接尾辞 “Z” で表記されます。

“` javascript
const date = new Date()
date.toISOString().split(‘T’)[0] // 2020-03-04
date.toISOString().split(‘T’)[0].replace(/-/g, ”) // 20200304
“`

### 日付の操作

#### 1日足す

“` javascript
const date = new Date()
date.setDate(date.getDate() + 1)
new

JavaScriptにおけるthisの挙動について

# 対象読者
– JavaScriptのオブジェクトについて理解している初学者
– thisの挙動がいまいちわからないJavaScript初学者

# そもそもJavaScriptにおけるthisって何?
JavaScriptにおけるthisとは、自分自身を表すオブジェクトのことを挿します。重要なポイントは**呼び出し元によって変わる**点です。どういうことか以下に記載していきます。

## グローバルオブジェクトを指すthis
“`sayFoo.js
const sayFoo = function () {
console.log(this[“foo”]);
}
foo = “foo”;// 予約後であるconst,letをつけない場合はグローバルオブジェクトとして定義される
sayFoo();
“`
`sayFoo.js`では、sayFoo()を呼び出した場合、グローバルオブジェクト(`window`オブジェクト)として変数fooを宣言しています。よって、thisの対象はグローバルオブジェクトをさす挙動になっています。
※`this[“foo”]`の[]で書く方法は**ブラ

[Javascript] 要素の外側をクリックした時にremoveする

#概要
例えばモーダルウインドウには×で閉じるボタンがレイアウトされている事が一般的ですが、
ユーザビリティを考えると、ボタン以外でも閉じられるようにしている事が望ましいですよね。
だからといって、どこでもクリックすれば閉じられるような処理では、
そもそも閉じるボタンの意味がなくなってしまいます。

今回はクリックイベントで付与したクラスを、
反応させたくない要素の外側かを判定して取り除く処理になります。
あくまで私が調べた結果ですので、もっとスマートな書き方があるかもしれません。

##制御部分のコード

“`Javascript:Javascript
const docOpen = document.getElementById(‘クラスを付与した要素’);
const elemBody = document.querySelector(‘body’);

elemBody.addEventListener(‘click’, e => {
if(e.target !== docOpen) {
docOpen.classList.remove(‘active’);