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

JavaScript에서 배열 요소 재정렬

<시간/>

문제

리터럴 배열 arr을 첫 번째이자 유일한 인수로 사용하는 JavaScript 함수입니다. 이 배열에는 인접하게 배치된 일부 중복 항목이 있습니다.

우리 함수는 배열의 두 요소가 같지 않도록 배열의 요소를 재배열해야 합니다. 우리의 함수는 재배열된 배열을 반환해야 합니다. 이러한 배열의 가능한 방법이 적어도 하나는 존재한다는 점을 감안할 때입니다.

예를 들어, 함수에 대한 입력이 -

인 경우
const arr = [7, 7, 7, 8, 8, 8];

그러면 출력은 다음과 같아야 합니다. -

const output = [7, 8, 7, 8, 7, 8];

출력 설명:

다른 올바른 재배열도 있을 수 있습니다.

예시

이에 대한 코드는 -

const arr = [7, 7, 7, 8, 8, 8];
const rearrangeArray = (arr = []) => {
   const map = arr.reduce((acc, val) => {
      acc[val] = (acc[val] || 0) + 1 return acc;
   }, {});
   const keys = Object.keys(map).sort((a, b) => map[a] - map[b]);
   const res = [];
   let key = keys.pop();
   for(let i = 0; i < arr.length; i += 2){
      if(map[key] <= 0){
         key = keys.pop();
      };
      map[key] -= 1;
      res[i] = Number(key);
   };
   for(let i = 1; i < arr.length; i += 2){
      if(map[key] <= 0){
         key = keys.pop();
      };
      map[key] -= 1;
      res[i] = Number(key);
   };
   return res;
};
console.log(rearrangeArray(arr));

출력

콘솔의 출력은 -

[ 8, 7, 8, 7, 8, 7 ]