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

배열에서 특정 항목을 먼저 포함하도록 배열 정렬 - JavaScript

<시간/>

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

const arr = [
   {flag: true, other: 1},
   {flag: true, other: 2},
   {flag: false, other: 3},
   {flag: true, other: 4},
   {flag: true, other: 5},
   {flag: true, other: 6},
   {flag: false, other: 7}
];

우리는 그러한 배열 하나를 받아 다음 조건에 따라 정렬하는 JavaScript 함수를 작성해야 합니다 -

  • arr.flag ===false인 경우 일치하는 요소가 배열의 첫 번째에 배치되지만 이전 일치하는 요소 뒤에만 배치됩니다.
  • 일치하지 않는 요소는 원래 있던 순서대로 유지됩니다.
  • 나타나는 순서가 중요합니다.

따라서 위의 배열의 경우 출력은 -

여야 합니다.
const output = [
   {flag: false, other: 3},
   {flag: false, other: 7},
   {flag: true, other: 1},
   {flag: true, other: 2},
   {flag: true, other: 4},
   {flag: true, other: 5},
   {flag: true, other: 6}
];

예시

다음은 코드입니다 -

const arr = [
   {flag: true, other: 1},
   {flag: true, other: 2},
   {flag: false, other: 3},
   {flag: true, other: 4},
   {flag: true, other: 5},
   {flag: true, other: 6},
   {flag: false, other: 7}
];
const sortByFlag = arr => {
   const sorter = (a, b) => {
      if(!a['flag'] && b['flag']){
         return -1;
      };
      if(a['flag'] && !b['flag']){
         return 1;
      }
      return a['other'] - b['other'];
   }
   arr.sort(sorter);
};
sortByFlag(arr);
console.log(arr);

출력

이것은 콘솔에 다음과 같은 출력을 생성합니다 -

[
   { flag: false, other: 3 },
   { flag: false, other: 7 },
   { flag: true, other: 1 },
   { flag: true, other: 2 },
   { flag: true, other: 4 },
   { flag: true, other: 5 },
   { flag: true, other: 6 }
]