Array.prototype.filter を拡張して配列からnullを取り除く

2024-04-02

TypeScriptで配列からnullを取り除く

filter メソッドは、配列の各要素に対して条件を評価し、条件に合致する要素のみを含む新しい配列を生成します。nullを取り除くには、v !== null という条件を指定します。

const arr = [1, null, 2, null, 3];
const filteredArr = arr.filter(v => v !== null);
console.log(filteredArr); // [1, 2, 3]

reduce メソッドは、配列の各要素を累積的に処理し、単一の値に集約します。nullを取り除くには、null 以外の要素を新しい配列に追加していくように処理します。

const arr = [1, null, 2, null, 3];
const filteredArr = arr.reduce((acc, v) => {
  if (v !== null) {
    acc.push(v);
  }
  return acc;
}, []);
console.log(filteredArr); // [1, 2, 3]

Array.prototype.filter メソッドを拡張することで、nullを取り除く処理をより簡潔に記述できます。

Array.prototype.filterNotNull = function() {
  return this.filter(v => v !== null);
};

const arr = [1, null, 2, null, 3];
const filteredArr = arr.filterNotNull();
console.log(filteredArr); // [1, 2, 3]

型ガードを使う

TypeScript 4.0以降では、型ガードを使ってnullを取り除くことができます。

const arr: (number | null)[] = [1, null, 2, null, 3];
const filteredArr = arr.filter(v: number | null): v is number => v !== null;
console.log(filteredArr); // [1, 2, 3]

これらの方法のいずれでも、配列からnullを取り除くことができます。自分に合った方法を選択してください。

  • filter メソッド
  • reduce メソッド
  • Array.prototype.filter の拡張
  • 型ガード

これらの方法を使って、TypeScriptで配列からnullを取り除くことができます。




const arr: (string | null)[] = ["a", null, "b", null, "c"];

// 1. `filter` メソッドを使う
const filteredArr1 = arr.filter(v => v !== null);
console.log(filteredArr1); // ["a", "b", "c"]

// 2. `reduce` メソッドを使う
const filteredArr2 = arr.reduce((acc, v) => {
  if (v !== null) {
    acc.push(v);
  }
  return acc;
}, []);
console.log(filteredArr2); // ["a", "b", "c"]

// 3. `Array.prototype.filter` を拡張する
Array.prototype.filterNotNull = function() {
  return this.filter(v => v !== null);
};
const filteredArr3 = arr.filterNotNull();
console.log(filteredArr3); // ["a", "b", "c"]

// 4. 型ガードを使う
const filteredArr4 = arr.filter(v: string | null): v is string => v !== null;
console.log(filteredArr4); // ["a", "b", "c"]

実行結果

["a", "b", "c"]
["a", "b", "c"]
["a", "b", "c"]
["a", "b", "c"]



Array.prototype.find と Array.prototype.indexOf を使う

Array.prototype.find メソッドは、条件に合致する最初の要素を返します。Array.prototype.indexOf メソッドは、要素の最初の出現位置を返します。これらのメソッドを使って、nullではない要素のみを含む新しい配列を作成できます。

const arr = [1, null, 2, null, 3];
const filteredArr = [];
let i = 0;
while ((i = arr.find((v, idx) => v !== null, i)) !== -1) {
  filteredArr.push(arr[i]);
  i++;
}
console.log(filteredArr); // [1, 2, 3]

for ループを使う

単純な方法として、for ループを使ってnullではない要素のみを含む新しい配列を作成できます。

const arr = [1, null, 2, null, 3];
const filteredArr = [];
for (let i = 0; i < arr.length; i++) {
  if (arr[i] !== null) {
    filteredArr.push(arr[i]);
  }
}
console.log(filteredArr); // [1, 2, 3]

これらの方法は、上記で紹介した方法よりも効率が劣る場合がありますが、よりシンプルなコードで実現できます。


typescript null


TypeScript: Array.from メソッドで型付き配列の配列を作成する

ジェネリック型を使用すると、配列の要素の型と、内側の配列の要素の型を指定することができます。readonly 修飾子を使用すると、配列を一度作成したら変更できないようにすることができます。Tuple 型を使用すると、固定長の配列を作成することができます。...


【保存版】Visual Studio CodeでTypeScriptをコンパイルできない時の対処法!エラー「tsc is not recognized」解決策【画像付き】

このエラーは、主に以下の3つの原因が考えられます。TypeScriptがインストールされていないPATH環境変数にtscが設定されていないVisual Studio Codeの設定が正しくされていない解決策以下の手順で、順に解決策を試してみてください。...


TypeScript エラー TS2339: "Property 'x' does not exist on type 'Y'" の原因と解決策

より具体的には、以下の状況で発生します。オブジェクト型 'Y' の定義に、プロパティ 'x' が明示的に宣言されていない'Y' 型の変数に、'x' プロパティにアクセスしようとしている例:このエラーを解決するには、以下の方法があります。'x' プロパティにアクセスする前に、'Y' 型の変数を別の型に変換する...


discriminated union

以下の例は、Person 型を拡張して、age プロパティを追加する方法を示しています。この例では、ExtendedPerson インターフェースは Person インターフェースを拡張し、age という名前の新しいプロパティを追加しています。person 変数は ExtendedPerson 型であるため、name と age の両方のプロパティにアクセスできます。...


Angular @ViewChild() エラー: 期待された引数が 2 つなのに 1 つしかありません

セレクター: 子コンポーネントまたはディレクティブのタイプ、またはテンプレート変数名オプションのオブジェクト: オプション設定このエラーを解決するには、以下のいずれかの方法を実行します。必要な引数をすべて渡すセレクターとオプションオブジェクトの両方を渡す必要があります。...


SQL SQL SQL SQL Amazon で見る



JavaScriptで配列の最小値/最大値を見つける5つの方法!徹底解説

方法1:Math. max/Math. minを使うMathオブジェクトには、配列の最大値/最小値を取得するMath. max()とMath. min()という関数があります。これらの関数は、引数として渡された数値の中で最大/最小のものを返します。


AngularとTypeScriptにおけるflatMap、flat、flattenエラーの解決方法

AngularとTypeScriptでflatMap、flat、flattenを使用する際に、any[]型の配列に対してこれらのメソッドが呼び出せないというエラーが発生することがあります。原因これらのメソッドは、ES2019で導入された新しい機能です。そのため、TypeScriptの設定でES2019への対応を有効にしていない場合、エラーが発生します。