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

JavaScriptで配列内の奇数回出現する要素を見つける方法

整数の配列が与えられたとき、その中で「奇数回だけ出現している」唯一の要素を見つける関数を作成してみましょう。

この問題では、奇数回出現する整数は必ず1つだけ存在することが保証されています。ここでは配列をソートしてから走査するというシンプルなアプローチで解決します。配列を昇順に並べ替えると、同じ値どうしが連続して並ぶため、隣接する要素を比較しながら出現回数をカウントすれば、奇数回出現している要素を効率よく特定できます。

アルゴリズムの流れ

  • sort((a, b) => a - b) で配列を数値として昇順ソートする
  • 前の値(last)と現在の値を比較し、同じならカウント(count)を増やす
  • 値が切り替わったタイミングでカウントが奇数か判定し、奇数であれば直前の値を返す

コード例

実際のコードは以下のとおりです。

const arr = [20, 1, -1, 2, -2, 3, 3, 5, 5, 1, 2, 4, 20, 4, -1, -2, 5];
const findOdd = arr => {
   let count = 0;
   let last;
   arr.sort((a, b) => a - b);
   for (let i = 0; i < arr.length; i++){
      if (arr[i] === last) {
         count++;
         continue;
      };
      if(count % 2){
         return last;
      };
      last = arr[i];
      count = 1;
   };
   return last;
};
console.log(findOdd(arr));

実行結果

コンソールには次のように出力されます。

5

処理のポイント

この例では、ソート後の配列は [-2, -2, -1, -1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 5, 20, 20] となります。5 だけが3回出現しており、それ以外はすべて偶数回(2回)出現しているため、ループの途中で count % 2 の判定により 5 が返される仕組みです。

  1. JavaScriptのNumber()関数とは?使い方とサンプルコードを解説

    JavaScriptのNumber()関数は、引数として渡された値やオブジェクトを、それに対応する数値へ変換するための関数です。真偽値や文字列型の数字、さらにはDateオブジェクトなども数値に変換できるため、データ型の変換処理において非常に便利な組み込み関数の一つです。例えば、Number(true)は「1」、Number(false)は「0」を返します。また、数字のみで構成された文字列「149」を渡せば数値の149に変換され、new Date()で生成した日付オブジェクトを渡すと、1970年1月1日からの経過ミリ秒数が返されます。以下に、Number()関数の動作を確認できるサンプルコードを

  2. JavaScriptで数字パターンを表示する方法【初心者向けサンプルコード】

    本記事では、テキスト入力欄とボタンを備えたJavaScript・HTMLプログラムの作成方法を解説します。ユーザーが入力欄に任意の数値(例:5)を入力してボタンをクリックすると、画面に以下のような数字パターンが表示される仕組みです。(n = 5 の場合の出力例)01 01 02 01 02 03 01 02 03 04 01 02 03 04 05仕組みのポイントこのパターンは二重ループ(ネストしたforループ)を使うことで実現できます。外側のループが「行」を制御し、内側のループがその行に表示する「数字の個数」を制御します。i 行目には 1 から i までの数字が順番に出力されるため、行が進む