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

JavaScriptで配列の重複を削除し、同じ数の空文字列を末尾に挿入する方法

JavaScriptでは、配列から重複する要素をすべて取り除き、その代わりに削除した分と同じ数の空文字列(空文字)を配列の末尾に挿入する関数が必要になるケースがあります。

要件の確認

たとえば、配列内に4つの重複した値が見つかった場合、それらをすべて削除し、代わりに4つの空文字列を末尾に追加します。つまり「重複を消して、穴を後ろに詰める」イメージです。

実装コード

この処理は reduce() メソッドを使うと簡潔に書けます。lastIndexOf() を利用することで、その値が配列内で最後に現れる位置かどうかを判定し、初回出現だけを結果に残す仕組みです。

const arr = [1,2,3,1,2,3,2,2,3,4,5,5,12,1,23,4,1];
const deleteAndInsert = arr => {
    const creds = arr.reduce((acc, val, ind, array) => {
        let { count, res } = acc;
        if(array.lastIndexOf(val) === ind){
            res.push(val);
        }else{
            count++;
        };
        return {res, count};
    }, {
        count: 0,
        res: []
    });
    const { res, count } = creds;
    return res.concat(" ".repeat(count).split(" "));
};
console.log(deleteAndInsert(arr));

コードの解説

  • reduce処理: 各要素について array.lastIndexOf(val) === ind が成立する場合、その要素は最後の出現であるため結果配列 res に追加されます。
  • 重複のカウント: 条件を満たさない場合は重複とみなし、カウンター count を1つ増やします。
  • 空文字列の生成: 最後に " ".repeat(count).split(" ") によって、重複の数と同じ個数の空文字列を生成し、concat() で元の結果配列の末尾に結合しています。

実行結果

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

[
    2, 3, 5, 12, 23, 4, 1,
    '', '', '', '', '', '', '',
    '', '', '', ''
]

このように、重複が取り除かれたユニークな値のリストの後ろに、削除された分だけの空文字列が挿入されていることが確認できます。

  1. JavaScriptのテンプレート文字列(テンプレートリテラル)とは?基本の使い方を解説

    テンプレート文字列(テンプレートリテラル)とは テンプレート文字列は、ES6(ECMAScript 2015)で導入された機能で、文字列の中に式を直接埋め込むことを可能にしました。従来のシングルクォート()やダブルクォート()の代わりに、バッククォート(``)を使用する点が特徴です。 テンプレート文字列を使うと、文字列の連結や補間(インターポレーション)がはるかに直感的に行えます。例えば ${a + b} のように記述することで、文字列の中に任意の式をそのまま埋め込めます。従来のように + 演算子で文字列をつなぎ合わせる方法と比べると、はるかに読みやすく美しい構文です。 JavaScriptに

  2. JavaScriptで文字列を大文字小文字を区別せずアルファベット順に並べ替え、空白を削除する方法

    問題アルファベットと空白を含む文字列 str を引数として受け取る JavaScript 関数を作成する必要があります。この関数は入力文字列を走査し、文字を「大文字小文字を区別せず、出現順に基づくアルファベット順」で新しい文字列へ連結する処理を行います。空白や句読点は単純に削除します。例えば、関数への入力が以下の場合を考えてみましょう。入力const str = some simple letter combination!;出力const output = abceeeeiiillmmmnnoooprssttt;解決のアプローチこの問題は、次の手順で解決できます。小文字 a(文字コード 97