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

JavaScriptで文字列の各文字にユニークな番号を割り当てた配列を作成する方法

JavaScriptでは、文字列を受け取り、その各文字に対して0から始まる連番をマッピングする関数を求められることがあります。

具体的には、初めて出現する文字(重複していない文字)に出会うたびにカウントを1つ増やし、同じ文字が再び現れた場合は、その文字に対応する同じ番号を割り当てます。このような処理を行う関数の作り方を解説します。

問題の例

例えば、次のような文字列が与えられたとします。

const str = 'heeeyyyy';

この場合、期待される出力は以下のようになります。

const output = [0, 1, 1, 1, 2, 2, 2, 2];

最初の h には 0、続く3つの e には 1、最後の4つの y には 2 が割り当てられています。つまり、隣接する同一文字は同じ番号を共有し、新しい文字が出現するごとに番号がインクリメントされる仕組みです。

実装コード

この関数は以下のように実装できます。

const str = 'heeeyyyy';
const mapString = str => {
    const res = [];
    let curr = '', count = -1;
    for(let i = 0; i < str.length; i++){
        if(str[i] === curr){
            res.push(count);
        }else{
            count++;
            res.push(count);
            curr = str[i];
        };
    };
    return res;
};
console.log(mapString(str));

コードの解説

この実装のポイントは以下の通りです。

  • curr:直前に処理した文字を保持する変数です。初期値は空文字列に設定しています。
  • count:現在のマッピング番号です。-1 から始めることで、最初の新しい文字に出会ったときに 0 になります。
  • ループ内で現在の文字が curr と一致すれば、そのまま count を結果配列に追加します。一致しなければ count を1増やし、curr を更新した上で配列に追加します。

実行結果

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

[
    0, 1, 1, 1,
    2, 2, 2, 2
]

このように、シンプルなループと比較処理だけで、文字列の各文字にユニークな連番を割り当てた配列を効率的に構築できます。時間計算量は O(n) であり、長い文字列に対しても高速に動作します。

  1. JavaScriptのArray.from()メソッドとは?使い方と実例をわかりやすく解説

    Array.from()メソッドは、配列風オブジェクト(array-like)や反復可能オブジェクト(iterable)から、新しい配列オブジェクトを作成するための便利なメソッドです。文字列、Map、Set、NodeListなど、さまざまなデータを手軽に配列へ変換できます。 Array.from()の基本的な動作 例えば、文字列「HelloWorld」に対してArray.from()を使用すると、1文字ずつ分割された新しい配列が生成されます。以下に実際のコード例を示します。 サンプルコード <!DOCTYPE html> <html lang="ja"&g

  2. JavaScriptの配列を文字列に変換する方法【toString()の使い方を解説】

    JavaScriptで配列の要素をひとつの文字列として扱いたい場面はよくあります。そんなときに便利なのがtoString()メソッドです。このメソッドを使うと、配列の各要素がカンマ(,)で区切られたひとつの文字列に変換されます。以下は、ボタンをクリックすると配列の中身が文字列として画面に表示されるシンプルなサンプルコードです。サンプルコード<!DOCTYPE html> <html lang=ja> <head> <meta charset=UTF-8 /> <meta name=viewport content=width=device-