JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

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]
  1. JavaScriptで正と負の無限大(Infinity)の値を出力する方法

    JavaScriptで扱える数値には上限があり、その範囲を超えた演算結果は特別な値「Infinity」(正の無限大)または「-Infinity」(負の無限大)として出力されます。この記事では、実際に正と負の無限大の値を画面に出力するサンプルコードを紹介します。 JavaScriptにおける無限大(Infinity)とは JavaScriptの数値型はIEEE 754で定められた倍精度浮動小数点数で、表現できる最大値は Number.MAX_VALUE(約1.79×10308)です。演算結果がこの最大値を超えると、エラーにはならずグローバルプロパティの Infinity が返されます。 正の方

  2. JavaScriptで数値を反転する方法|負の数の符号を保持しながら桁を逆順にする

    課題今回は、数値を引数として受け取り、その桁を逆順に並べ替えた数値を返すJavaScript関数を作成します。実装時に注意すべき重要なポイントがあります。それは元の数値の符号を保持することです。つまり、負の数を反転させた場合でも、結果は必ず負の数のまま返されなければなりません。コード例以下がその実装コードです。 0) { y = y * 10 + (x % 10); x = Math.floor(x / 10); } return Math.sign(n) * y; } console.log(reverseNumber(num));出力結果-