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

配列を圧縮して連続する要素をグループ化するJavaScript


このようにダッシュ(-)で区切られたいくつかの繰り返し単語を含む文字列が与えられます-

const str = 'monday-sunday-tuesday-tuesday-sunday-sunday-monday-mondaymonday';

ここでの仕事は、オブジェクトの配列を返す関数を作成することです。各オブジェクトには2つのプロパティvalueとcountが含まれ、valueは文字列内の単語(月曜日、火曜日、日曜日)、countは連続した出現回数です。

上記の文字列のように、この配列は次のようになります-

const arr = [{
   val: 'monday',
   count: 1
}, {
   val: 'sunday',
   count: 1
}, {
   val: 'tuesday',
   count: 2
}, {
   val: 'sunday',
   count: 2
}, {
   val: 'monday',
   count: 3
}]

月曜日が1回、次に日曜日が1回、火曜日が2回、日曜日が2回、最後に月曜日が3回表示されるためです。

配列を分割してから、Array.prototype.reduce()メソッドを使用して、次のように目的の配列を再帰的に返します-

これが完全なコードです-

const str = 'monday-sunday-tuesday-tuesday-sunday-sunday-monday-mondaymonday';
const str2 = 'friday-friday-sunday-tuesday-sunday-sunday-monday-thursdaymonday';
const compressString = (str) => {
   return str.split('-').reduce((acc, val) => {
      const { length: l } = acc;
      if(acc[l-1]?.val === val){
         acc[l-1].count++;
         return acc;
      }else{
         return acc.concat({
            val,
            count: 1
         });
      }
   }, []);
}
console.log(compressString(str));
console.log(compressString(str2));

出力

上記のコードのコンソールでの出力は-

になります
[
   { val: 'monday', count: 1 },
   { val: 'sunday', count: 1 },
   { val: 'tuesday', count: 2 },
   { val: 'sunday', count: 2 },
   { val: 'monday', count: 3 }
]
[
   { val: 'friday', count: 2 },
   { val: 'sunday', count: 1 },
   { val: 'tuesday', count: 1 },
   { val: 'sunday', count: 2 },
   { val: 'monday', count: 1 },
   { val: 'thursday', count: 1 },
   { val: 'monday', count: 1 }
]

  1. JavaScript配列オブジェクトを数える方法は?

    JavaScript配列オブジェクトをカウントするために、Object.prototype.__proto__プロパティを使用しています。 例 次のコードを実行して、配列オブジェクトをカウントすることができます- <html>    <head>       <title>JavaScript Clone Date</title>    </head>    <body>       <scri

  2. JavaScriptでIDごとにオブジェクトの配列をグループ化する方法は?

    以下は、JavaScriptでオブジェクトの配列をIDでグループ化するコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <style>