😺

TypeScriptの自分用技術スタック

に公開
2025/08/12
2件

概略

すごい基本的なことを記録しています。

判定

指定した文字を含むかどうかを判定

const isMatch = str.includes("指定文字");

指定した文字(複数)を含むかどうかを判定

const specialChars = ['.', '*']
const isMatch = specialChars.some(char => str.includes(char));

指定した要素を含むかどうかを判定

/// false
const isMatch = ['AAA', 'BBB'].includes('CCC');

処理分岐

truthyならTrue、falsyならFalaseにする

// metaが存在し、meta.errorがtruthyならtrue
const isError = !!(meta && meta.error)

配列

文字列を1文字ずつループする

最適な方法
for (const char of s) {
  // doing...
}

当初は以下for (let index = 0; index < s.length; index++)のみ書いていましたが、他ユーザさんからサロゲートペアに正しく対応できないとご指摘をいただきましたので、for (const char of s)に書き換えました。

良くない方法
for (let index = 0; index < s.length; index++) {
  const char = s[index];
}

2つの記述の違い

for (let index = 0; index < s.length; index++) { const char = s[index]; }

  • これはUTF-16の「コードユニット」単位でループする。
  • サロゲートペア文字は2つのコードユニットで1文字なので、途中で分断されてしまい正しく1文字として扱えない。

for (const char of s) { ... }

  • これはES6の「イテレータ」で、ユニコードの「コードポイント」単位でループする。
  • サロゲートペアも1文字として正しく取得できます。
const s = 'A😊B';
/// サロゲートペア(絵文字や漢字)を扱えない
for (let i = 0; i < s.length; i++) {
  console.log(s[i]); // A, �, �, B
}

/// ササロゲートペア(絵文字や漢字)を扱える
for (const char of s) {
  console.log(char); // A, 😊, B
}

並び順を変更する

デフォルトのsort()を使うと、文字列順にソートする。number[]であっても文字列順になるので注意。

const l1 = [2, 4, 3, 21]
/// [ 2, 21, 3, 4 ]
const sortedL1 = [...l1].sort();

sort((a,b) => a-b)を使った場合の並び替えのルールは次の通り。

  • 戻り値が負ならaが先(a - b < 0 → aが先(昇順))
  • 戻り値が正ならbが先(a - b > 0 → bが先(降順))
  • 戻り値が0なら順序そのまま(a - b = 0 → 順序そのまま))
const l1 = [2, 4, 3, 21]
/// [ 2, 3, 4, 21 ]
const sortedL1 = [...l1].sort((a, b) => a - b);

/// [ 21, 4, 3, 2 ]
const reversedL1 = [...l1].sort((a, b) => b - a);

Math

大きい方の値を採用する

const res = Math.max(num1, num2);

Math

大きい方の値を採用する

const res = Math.max(num1, num2);

Map

Mapはキーと値のペアでデータを管理できる多次元配列に似たコレクション。多次元配列と違う点は次の通り。

  • キーは文字列以外の型(数値やオブジェクトなど)が使用可能。
  • 要素の順番を保持してくれる。
  • 要素数が増えても検索速度は一定。(多次元配列は要素数に比例して検索速度が変わる)

Mapに追加する

// キーが存在すれば上書き、なければ追加
map.set('キー','値');

Map

2, 4, 3, 21]
/// [ 2, 21, 3, 4 ]
const sortedL1 = [...l1].sort();


`sort((a,b) => a-b)`を使うと、`a-b`が`true`ならbの次にaが来るようになる。(b→aに並び替える)`a-b`が`0`なら何もしない。
```ts
const l1 = [2, 4, 3, 21]
/// [ 2, 3, 4, 21 ]
const sortedL1 = [...l1].sort((a, b) => a - b);

/// [ 21, 4, 3, 2 ]
const reversedL1 = [...l1].sort((a, b) => b - a);

Discussion

junerjuner

この方が良いのでは?(サロゲートペア対応とか必要なので

文字列を1文字ずつループする

for (const char of s) {
  // doing...
}

sort((a,b) => a-b) を使うと、a-b がtrueならbの次にaが来るようになる。(b→aに並び替える)a-bが0なら何もしない。

-1 は true 0 が false なので 0を超える場合は の方が良いのでは?

!!1
// -> true
!!0
// -> false
!!-1
// -> true
noelsunnoelsun

ありがとうございます!

この方が良いのでは?(サロゲートペア対応とか必要なので

ご指摘の通りでした。サロゲートペア対応ができないことを知らなかったため、追記させていただきました。

-1 は true 0 が false なので 0を超える場合は の方が良いのでは?

すみません。もしよければ教えてください。
私の認識では結果が、マイナス/プラス/0 の3パターンで並び替えをしているものだと思っていました。そのため、truthyかfalsyかは関係ないと思っていましたが、間違っておりますでしょうか?
(記事の書き方が中途半端だったため、記事を修正しました!)