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

JavaScript에서 숫자 배열을 집합으로 정렬하는 알고리즘

<시간/>

다음과 같은 객체를 포함하는 배열이 있다고 가정해 보겠습니다. -

const arr = [
   {'item1': 144},
   {'item2': 0},
   {'item3': 366},
   {'item4': 15},
   {'item6': 366},
   {'item7': 19},
   {'item8': 211},
   {'item9': 121}
];

우리는 하나의 그러한 배열을 취하고 객체를 4개의 그룹으로 클러스터링하는 JavaScript 함수를 작성해야 합니다. 즉 -

'XL', 'L', 'M', 'S'

숫자는 상대적 크기를 기준으로 이러한 그룹에 배포되어야 합니다.

예시

이에 대한 코드는 -

const arr = [
   {'item1': 144},
   {'item2': 0},
   {'item3': 366},
   {'item4': 15},
   {'item6': 366},
   {'item7': 19},
   {'item8': 211},
   {'item9': 121}
];
const compareWithRange = (rangeArr, num) => {
   for(let i = 0; i < rangeArr.length; i++){
      if(num <= rangeArr[i] && num > rangeArr[i + 1]){
         return i;
      };
   };
   return rangeArr.length - 1;
}
const groupBySize = (arr = []) => {
   const mapping = arr => arr.map(el => el[Object.keys(el)[0]]);
   const max = Math.max(...mapping(arr));
   const range = {
      'XL': max,
      'L': (max * 3) / 4,
      'M': (max / 2),
      'S': (max / 4)
   };
   const legend = ['XL', 'L', 'M', 'S'];
   const res = {};
   arr.forEach(el => {
      const num = el[Object.keys(el)[0]];
      const index = compareWithRange(Object.keys(range).map(key => range[key]), num);
      const size = legend[index];
      if(res.hasOwnProperty(size)){
         res[size].push(Object.keys(el));
      }
      else{
         res[size] = [Object.keys(el)];
      }
   });
   return res;
};
console.log(groupBySize(arr));

출력

콘솔의 출력은 -

{
   M: [ [ 'item1' ], [ 'item9' ] ],
   S: [ [ 'item2' ], [ 'item4' ], [ 'item7' ] ],
   XL: [ [ 'item3' ], [ 'item6' ] ],
   L: [ [ 'item8' ] ]
}