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

JavaScriptで配列内の文字列から連続する重複文字を削除する方法


問題

JavaScriptで、文字列の配列を引数として受け取る関数を作成することを考えます。この関数は、各文字列の中で連続して出現する重複した文字を削除し、処理後の新しい文字列の配列を返す必要があります。

たとえば「kelless」という文字列には「ll」や「ss」のように同じ文字が続く部分があるため、それぞれ1文字にまとめて「keles」に変換するイメージです。

解決策の例

以下は実際のコードです −

const arr = ["kelless", "keenness"];
const removeConsecutiveDuplicates = (arr = []) => {
    const map = [];
    const res = [];
    arr.map(el => {
        el.split('').reduce((acc, value, index, arr) => {
            if (arr[index] !== arr[index+1]) {
                map.push(arr[index]);
            }
            if (index === arr.length-1) {
                res.push(map.join(''));
                map.length = 0
            }
        }, 0);
    });
    return res;
}
console.log(removeConsecutiveDuplicates(arr));

コードの仕組み

このコードの処理の流れは次のとおりです。

  • split('') で各文字列を1文字ずつの配列に分解します。
  • reduce を使いながら、現在の文字 arr[index] と次の文字 arr[index+1] を比較します。
  • 両者が異なる場合だけ、その文字を一時配列 map に追加します。これにより、連続する重複は1文字だけ残ります。
  • 文字列の末尾まで処理したら、join('') で結合した結果を res に格納し、map を空にして次の文字列へ進みます。

出力

[ 'keles', 'kenes' ]

ご覧のとおり、「kelless」→「keles」、「keenness」→「kenes」となり、連続していた重複文字が正しく1文字に圧縮されています。

  1. JavaScriptで配列内の連続する数値ペアの個数を数える方法

    問題整数の配列を受け取るJavaScript関数を作成します。この関数は、配列の中から「隣接する2つの要素の値が連続している(差が±1)」ペアの個数を数えて返す必要があります。アプローチ最もシンプルな方法は、配列を先頭から順に走査しながら、インデックス i と i+1 の要素を1組として比較していくことです。ループ変数を2ずつ増やすことで、同じ要素を重複してチェックすることなく各ペアを検証できます。2つの要素の差が1であれば、そのペアは「連続した数値」とみなし、カウンターを1つ増やします。コード例以下が実際のコードです。const arr = [1, 2, 5, 8, -4, -3, 7, 6

  2. JavaScriptで文字列の配列からコメントを削除する方法

    この記事では、JavaScriptを使って文字列の配列からコメント部分を削除する方法について解説します。 問題 文字列の配列 arr を第一引数として、特殊文字の配列 starters を第二引数として受け取るJavaScript関数を作成する必要があります。 starters 配列には、コメントの開始となり得る文字が格納されています。作成する関数は、配列 arr を走査し、各文字列に含まれるコメントをすべて削除した結果を返すものとします。 例えば、関数への入力が次のような場合を考えてみましょう。 const arr = [    red, green !blue