JavaScriptでUnary plus (+)を使いかっこよくNumber型に変換する

他人のコードを盗み見ていた時+'0'なるコードを発見しなんだろうと調べてみた。 職人の技は目で盗め ってよく昔気質な職業で聞かれる言葉だけど、有名で最先端の技術がオープンソースで誰でも見れる状態であるプログラミングにも言えるんじゃないかと思っている。 暇さえあれば、Githubで他人のコードを読んでますってかっこいいので言ってみたいけど、噓になるので言えない。 ただ仕事中はできる限り、時間が空いた時にコードをを読むようにしている。 特に自分に関係のないプルリクなんかも追いかけるようにしている。 そこで+'0'なるコードを発見した。 ぱっと見、計算をしているようだと思ったけど、どうやら違いそうなので調べてみた。 単項プラス (+) / Unary plus (+) 簡単に言うとNumberに変換してくれるもの。 つまり+'0'はNumber(0)と同様の扱い。 ただNumber()関数の方がぱっと見でわかりやすいので、あえて 単項演算子を使うメリットはないかもしれない。

投稿日 · 2023-06-13 · 更新日 · 2024-06-07 · 1 分 · nove-b

JavaScriptで2つの配列を比較し、一致したものを取り出す方法コード

なんかよくやるのに、良く忘れるのでメモしておく 2つの配列を比較し一致したものを取り出したい。 特に難しいことはないのでまるっとコードを記載する。 const a:string[] =['a', 'b', 'c', 'd'] const b:string[] =['d', 'e', 'f', 'g'] // 期待値 // const c = string[] = ['d'] const c = a.filter(a =>b.includes(a)) console.log(c) これでcは期待値になる。 どっちをFilterするのか さて、いつもよくわからなくなるのは、どっちを回すべきなのかということ。 例えば今回は両者ともにLengthが4つだからいいけれど、例えば5と10だとどうなるのか。 実際にやってみる const a: string[] = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'] const b: string[] = ['b', 'd', 'f', 'h', 'i', 'xx'] const c = a.filter(a => b.includes(a)) console.log(c) と const a: string[] = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'] const b: string[] = ['b', 'd', 'f', 'h', 'i', 'xx'] const c = b....

投稿日 · 2023-06-06 · 更新日 · 2024-06-07 · 1 分 · nove-b

JavaScriptの配列で重複したものを削除し、ユニークな配列を作成する

配列から重複したものを削除する const numberArray = [0, 1, 1, 2, 3, 4, 4, 5]; const set = new Set(numberArray); const newNumberArray = [...set]; console.log(newNumberArray) // [0, 1, 2, 3, 4, 5] ただこれだけ。 これだけだと物足りないので説明をすると、 上記のコードは、配列numberArrayから重複を除いた値を取得し、新しい配列newNumberArrayに格納しています。具体的には、配列numberArrayをSetオブジェクトに変換し、Setオブジェクトのユニークな値を持つ新しい配列を作成しています。 スプレッド演算子(…)を使用して、Setオブジェクトを配列に変換していることに注目してください。これにより、新しい配列newNumberArrayが作成され、それにはnumberArrayのユニークな値が含まれます。 最後に、console.logを使用してnewNumberArrayをコンソールに出力しています。 ってChat GPTが説明してくれました。

投稿日 · 2023-05-10 · 更新日 · 2024-06-07 · 1 分 · nove-b

複雑な文字列パターンをマッチさせる必要がある場合はIF分ではなく正規表現を使うべきだとChat GPTが言ってた

従来 考えてみたと書いたが、そもそも従来の書き方だとどうしても汚く見えてしまうので、これを機に綺麗にしようという次第である。 で、その従来の書き方といえば、 /* 文豪がランダムで抽出される */ const targetArray = ['三島由紀夫','太宰治','夏目漱石','芥川龍之介','宮沢賢治'] const randamIndex = Math.floor( Math.random() * targetArray.length ); const target = targetArray[randamIndex] /* 文豪が芥川か太宰ならture */ const matchCondition = (target) => { return target === '芥川龍之介' || target === '太宰治' } console.log(target, matchCondition(target)) こんな感じ。 条件が少なければ別にいいけど、条件が多い場合はtarget === 'hoge'を沢山繋いでいく必要がある。 これをもっと綺麗にしたい。 正規表現を使いましょう const condition = /\芥川龍之介|太宰治\b/ console.log(target, condition.test(target)) これで、わざわざtarget === 'hoge'でつなぐことなく/\芥川龍之介|太宰治\b/に文豪名を増やしていくだけで済むようになった。 Chat GPTは? 考えたコードが本当に正しいか、シンプルか、美しいかの判定ができないので、流行のChat GPTにも考えてもらった。 三島由紀夫、太宰治、夏目漱石、芥川龍之介、宮沢賢治の中の1つがランダムに抽出されるデータがあり、抽出されたデータが芥川龍之介か太宰治ならtrueを返すコードをJavascriptで書いて こんにちは!下記がそのコードになります: const writers = ['三島由紀夫', '太宰治', '夏目漱石', '芥川龍之介', '宮沢賢治']; const selectedWriter = writers[Math....

投稿日 · 2023-03-19 · 更新日 · 2024-06-07 · 1 分 · nove-b

JavaScriptで文字列falseをBoolean型に変更しようとして沼に落ちた

文字列をBoolean型に変換するとtrueになる console.log(Boolean('false')) // true 特に何も考えず上記コードを書きデバック時にはまった。 他の型は上記のような書き方でうまく変換できるので、原因解明に時間がかかった。 Boolean()を調べてみると、 注意: 文字列への型強制や数値への型強制などの他の型の変換とは異なり、論理値への型強制はオブジェクトからプリミティブに変換しようとするわけではありません。 どうやらこのようなことらしい。 じゃあ、いったいどうすればいいのか。 文字列falseをBoolean型にする方法 console.log(JSON.parse(('false').toLowerCase())) 上記コードでうまく変換できた。

投稿日 · 2023-02-22 · 更新日 · 2024-06-07 · 1 分 · nove-b