JavaScriptで配列内の各データ型の出現回数を数える方法
はじめに
本記事では、異なるデータ型の要素が混在する配列を受け取り、各データ型ごとの出現回数をMapオブジェクトとして返すJavaScript関数の作成方法を解説します。
例として、次のような配列を考えてみましょう。
const arr = [23, 'df', undefined, null, 12, {
name: 'Rajesh'
}, [2, 4, 7], 'dfd', null, Symbol('*'), 8];この配列には、数値・文字列・undefined・null・オブジェクト・配列・シンボルなど、さまざまなデータ型が含まれています。これらをtypeof演算子で判定し、Mapを使って集計していきます。
コード例
以下がその実装コードです。
const arr = [23, 'df', undefined, null, 12, {
name: 'Rajesh'},
[2, 4, 7], 'dfd', null, Symbol('*'), 8];
const countDataTypes = arr => {
return arr.reduce((acc, val) => {
const dataType = typeof val;
if(acc.has(dataType)){
acc.set(dataType, acc.get(dataType)+1);
}else{
acc.set(dataType, 1);
};
return acc;
}, new Map());
};
console.log(countDataTypes(arr));コードの解説
この関数では、Array.prototype.reduce()メソッドを使って配列を走査し、初期値として新しいMapオブジェクトを渡しています。
処理の流れは以下の通りです。
1. 各要素に対してtypeof演算子でデータ型を取得します。
2. Mapにすでにそのデータ型のキーが存在する場合は、カウントを1つ増やします。
3. 存在しない場合は、新しいキーを追加してカウントを1に設定します。
なお注意点として、JavaScriptでは配列やnullもtypeofでは「object」と判定されます。そのため、プレーンなオブジェクト・配列・nullはすべて「object」にまとめて集計されます。
出力結果
コンソールには以下のように出力されます。
Map(5) {
'number' => 3,
'string' => 2,
'undefined' => 1,
'object' => 4,
'symbol' => 1
}この結果から、数値が3つ、文字列が2つ、undefinedが1つ、オブジェクト(オブジェクト・配列・nullを含む)が4つ、シンボルが1つ存在することが確認できます。
まとめ
reduce()とMapを組み合わせることで、簡潔かつ効率的に配列内のデータ型分布を集計できます。より厳密に配列やnullを区別したい場合は、Array.isArray()やval === nullによる判定を組み合わせると良いでしょう。
-
MongoDBで配列内の要素数をカウントする方法($size演算子の使い方)
MongoDBで配列の要素数を取得するには?MongoDBで配列フィールドに含まれるアイテム(要素)の数を数えたい場合は、集計フレームワーク(aggregation)の $size 演算子を使用します。$size は、指定した配列に含まれる要素の総数を数値として返してくれる便利な演算子です。基本構文$size 演算子を使った基本的な構文は以下のとおりです。db.yourCollectionName.aggregate({$project:{anyFieldName:{$size:$yourArrayName}}}).pretty();この構文では、$project ステージを使って新しいフィー
-
N回の操作後に配列に残る「1」の個数を数えるアルゴリズム【C言語】
問題概要サイズNの整数型配列が与えられ、初期状態ではすべての要素が0です。ここで、合計N回の操作を行った後、配列内に「1」がいくつ残っているかを求めるのが課題です。各操作には次のようなルールが定められています。1回目の操作:位置1, 2, 3, 4, … の要素を反転する2回目の操作:位置2, 4, 6, 8, … の要素を反転する3回目の操作:位置3, 6, 9, 12, … の要素を反転するつまり、i回目の操作では「iの倍数の位置にある要素」を反転(0→1、1→0)します。すべての操作を終えた後の配列に含まれる「1」の個数を数えましょう。入力例と出力例入力Arr[] = { 0,0,0,0