压缩数组以将连续元素分组

我们给了一个字符串,其中包含一些用破折号(-)分隔的重复单词,如下所示:

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

现在我们的工作是编写一个返回对象数组的函数,其中每个对象包含两个属性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

}]

因为星期一出现一次,然后星期日一次,星期二两次,星期日两次,最后星期一三次。

我们将拆分数组,然后使用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 }

]

以上是 压缩数组以将连续元素分组 的全部内容, 来源链接: utcz.com/z/316752.html

回到顶部