JavaScriptで配列内の正の数・負の数・ゼロの割合を求める方法
整数(正の数、負の数、ゼロ)が混在した配列があるとします。
const arr = [23, -1, 0, 11, 18];
このような配列を第1引数(唯一の引数)として受け取り、「正の数」「負の数」「ゼロ」という3つのグループそれぞれが配列全体に占める割合(小数の比率)を求めて返すJavaScript関数を作成する必要があります。
期待される出力
たとえば上記の配列の場合、長さは5なので、出力は次のようになります。
const output = [.2, .2, .6];
出力される配列には必ず3つの数値が含まれ、それぞれ「負の数」「ゼロ」「正の数」の割合を表します。答えの正しさを手軽に確認する方法として、3つの値を合計して1に近づくかどうかチェックするやり方があります。合計がほぼ1になっていれば、おそらく正しく問題を解けていると言えるでしょう。
実装例
この問題を解くコードは以下のとおりです。
const arr = [23, -1, 0, 11, 18];
const findRatio = (arr = []) => {
const { length } = arr;
const res = [0, 0, 0];
for(let i = 0; i < arr.length; i++){
const el = arr[i];
const key = el / Math.abs(el || 1);
res[key + 1]++;
};
return res.map(el => el / length);
};
console.log(findRatio(arr));コードの解説
このコードでは、まず各要素に対して el / Math.abs(el || 1) という式でキーを計算しています。正の数なら1、負の数なら-1になり、ゼロの場合は el || 1 の部分が1に置き換わるため、結果的にキーは2となります。このキーに1を加えることで、カウント用配列 res のインデックス(0:負の数、1:ゼロ、2:正の数)に対応させ、各グループの出現回数を数えています。
最後に map メソッドを使い、各カウントを配列の長さで割ることで、小数形式の割合に変換して返しています。
出力
コンソールには次のように表示されます。
[0.2, 0.2, 0.6]
-
JavaScriptで正と負の無限大(Infinity)の値を出力する方法
JavaScriptで扱える数値には上限があり、その範囲を超えた演算結果は特別な値「Infinity」(正の無限大)または「-Infinity」(負の無限大)として出力されます。この記事では、実際に正と負の無限大の値を画面に出力するサンプルコードを紹介します。 JavaScriptにおける無限大(Infinity)とは JavaScriptの数値型はIEEE 754で定められた倍精度浮動小数点数で、表現できる最大値は Number.MAX_VALUE(約1.79×10308)です。演算結果がこの最大値を超えると、エラーにはならずグローバルプロパティの Infinity が返されます。 正の方
-
JavaScriptで数値を反転する方法|負の数の符号を保持しながら桁を逆順にする
課題今回は、数値を引数として受け取り、その桁を逆順に並べ替えた数値を返すJavaScript関数を作成します。実装時に注意すべき重要なポイントがあります。それは元の数値の符号を保持することです。つまり、負の数を反転させた場合でも、結果は必ず負の数のまま返されなければなりません。コード例以下がその実装コードです。 0) { y = y * 10 + (x % 10); x = Math.floor(x / 10); } return Math.sign(n) * y; } console.log(reverseNumber(num));出力結果-