Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

연속 요소를 그룹화하는 배열 압축 JavaScript

<시간/>

다음과 같이 대시(-)로 구분된 일부 반복 단어가 포함된 문자열이 제공됩니다. −

const str ='월요일-일요일-화요일-화요일-일요일-일요일-월요일-월요일월요일';

이제 우리가 할 일은 객체의 배열을 반환하는 함수를 작성하는 것입니다. 여기서 각 객체에는 두 개의 속성 값과 개수가 포함되고, 값은 문자열(월요일, 화요일, 일요일)의 단어이고 개수는 연속된 출현 횟수입니다.

위의 문자열과 마찬가지로 이 배열은 다음과 같습니다. -

const arr =[{ val:'월요일', 개수:1}, { val:'일요일', 개수:1}, { val:'화요일', 개수:2}, { val:'일요일', 개수:2}, { val:'월요일', 개수:3}]

월요일이 한 번 나타난 다음 일요일이 한 번, 화요일이 두 번, 일요일이 두 번, 마지막으로 월요일이 세 번 나타나기 때문입니다.

배열을 분할한 다음 Array.prototype.reduce() 메서드를 사용하여 다음과 같이 원하는 배열을 재귀적으로 반환합니다. -

전체 코드는 다음과 같습니다 -

예시

const str ='월요일-일요일-화요일-화요일-일요일-일요일-월요일-월요일'; const str2 ='금요일-금요일-일요일-화요일-일요일-일요일-월요일-목요일'; const compressString =(str ) => { 반환 str.split('-').reduce((acc, val) => { const { 길이: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:'월요일', 개수:1 }, { val:'일요일', 개수:1 }, { val:'화요일', 개수:2 }, { val:'일요일', 개수:2 }, { val:'월요일', 카운트:3 }][ { val:'금요일', 카운트:2 }, { val:'일요일', 카운트:1 }, { val:'화요일', 카운트:1 } , { val:'일요일', 카운트:2 }, { val:'월요일', 카운트:1 }, { val:'목요일', 카운트:1 }, { val:'월요일', 카운트:1 }]