カメリアの記事

意味があることやないことを綴ります

JavaScript

for と Promise

以前「 for 文で Promise.all 」という記事を書きました。以前は上手くいっていた気がするのですが、先日やってみたら上手くいきません。仕方ないのでしたように書きました。 Promise を受けた then() 内に関数を置いておけば見た目の複雑化が避けられます。…

for 文は真のループ処理じゃなかった

for 文はループ処理、そんな気がしていました。下のようにした場合、 i = 0 が終わってから i = 1 の処理がなされるのだと思っていましたが、必ずしもそうではないようです。 for (let i in array) { // 処理 } 必ずしもそうではない場合というのは下のよう…

そこにも要ったのか await

下のようなコードを書いていました。正常に答えが返ってきません。 w は console.log() で見ると一見中身のない配列。でも表示を展開すると中身が見えます。だけど join() すると無が生成されます。変な配列が生成されるのです。配列の問題だと思ってググる…

for in の変数は文字列

for in の変数は数字じゃなくて文字列なんですね。そんなことで大丈夫なのかと思うのですが、一応動いています。いくら書き方が簡単になったからといって変数を使って計算する際には Number(i) などとせねばならずスマートじゃありません。果たしてこの書き…

関数を配列に入れて場合分け実行する

例えば apple, orange, prune, mango のどれかが、引数 fruit によって与えられ、それぞれ異なる関数を実行する際に下のようにするといいと思います。 let arr_proc = { apple: () => {...}, orange: () => {...}, prune: () => {...}, mango: () => {...} }…

文書末の空行を削除する

言い換えると「 EOF の改行を削除する」になります。下のようにすると、どうにもスマートじゃない気がするのですが、例えばグローバルサーチの match(/.*$/) で最後にヒットした部分の位置を数えて削除するというのもスマートでありません。 let w = src .sp…

はてなブログのユーザ CSS を取得して表示しようとしたけど失敗した

失敗して悔しいので記事として記録を残しておきます。はてなブログの、常に最新のユーザ CSS を表示する記事を書くために下のようなコードを書きました。これを「HTML編集」タブに貼り付ければいいはずでした。 let elm_userCss = document.querySelector("#…

Markdown から TOC を生成するやつ

以前作って新進のデベロッパー系ブログサービスで発表したんですが、あのブログサービスはどうなったんだろう。名前を忘れてしまって探すこともままならない。じゃあこっちで新しい記事のネタにしちゃえ。 タイトルのまま Markdown から TOC を生成するやつ…

for 文で Promise.all

記事「for文の中で非同期関数を使いたいときでも慌てずPromiseする」を参考に下のようにしました。本当にこれでいいのか不安で困ります。実行のタイミングは同期でもよく変わってないですからね。困ります。 でも上手くいきました。上手くいくと感動ですね。…

ノード名を文字列で取得する

childNodes[0] は String ではないので childNodes[0].match(/.../) などとするとエラーが出ます。 childNodes[0].localName とするといいようです。 事例 let pIndex = () => { for (i = 0; i < elm_text.childNodes.length; i++) { if (elm_text.childNode…

公開しても仕方ない GAS の魅力

GAS は Google のオフィスアプリで使えるプログラムです。僕はもっぱら Google スプレッドシートで、個人的な独自関数として利用しています。 JavaScript が書けるなら使わない手はないでしょう。なんせ、これがあるからできること、があるのですから。 ニッ…

改行記号を揃える

LF に揃えるには CR&LF の CR を削除します。 let object = source.replace(/\r/g, "") CR&LF に揃えるには任意の改行記号を LF に置換します。 let object = source.replace(/\r?\n/g, "\n")

URL パラメータを配列に入れる

https://sample.com/sample.html?foo=baa&doo=vee のような ? 以降の URL パラメータを配列に入れます。 let arr_search = location.search.slice(1).split("&") let arr_param = {} for (let i = 0; i < arr_search.length; i++) { let w = arr_search[i].s…

条件式の書き方の提案

条件式はややこしいです。ややこしいからコードを読んでも理解できません。こんなふうに書けば理解しやすいんじゃないでしょうか、という提案です。具体的には下のようにします。 if ( ( i === 0 || i === length - 1 ) || ( foo > 0 && baa < 0 ) ) { ... }…

Amazon の URL を短縮(正規化)するブックマークレット

概要 https://www.amazon.co.jp/%E6%B5%B7%E3%82%92%E3%81%82%E3%81%92%E3%82%8B-%E5%8D%98%E8%A1%8C%E6%9C%AC-%E4%B8%8A%E9%96%93-%E9%99%BD%E5%AD%90/dp/4480815589?ref_=Oct_d_omwf_d_467250&pd_rd_w=A21ML&pf_rd_p=f1d656c3-95aa-4223-9c48-d7a0e899e671…

僕がコードを書くとこんなことになりがち

僕が書くとこんなこんなことになりがち。 async/await の使い方が正しいのか分からなくて困ってる。書かないとちゃんと動かないし、書けば一応思いどおりに動いてるから、いいのかなーと思ってるけど。 procBr() .then(async () => { await classify() }).th…

連想配列に関数を登録する

連想配列に関数を登録するとちょっと便利です。同じ配列を使ったまま引数の与え方でまったく別の振る舞いをします。 if 文を使わないで場合分けできるのでスマートかな、と。 arr_fn = { foo: () => {...}, baa: () => {...} }let w = arr_fn(hoge) としてお…