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

JavaScript 배열 순위 - JavaScript

<시간/>

다음과 같은 Number의 세 가지 JavaScript 배열이 있다고 가정합니다. -

const array1 = [10,23,53,74,33,56,6,0,43,45,11];
const array2 = [52,46,27,28,4,11,53,6,75,75,22];
const array3 = [26,18,10,12,31,12,5,8,44,34,65];

모든 배열의 길이는 항상 동일합니다.

이러한 배열의 개수에 관계없이 순위(즉, 감소하는 의미의 순서)에 따라 기존 배열의 해당 요소를 매핑하는 JavaScript 함수를 작성해야 합니다.

따라서 위 배열의 경우 출력은 다음과 같아야 합니다. -

const array1= [3,2,1,1,1,1,2,3,2,2,3];
const array2= [1,1,2,2,2,2,1,2,1,1,2];
const array3= [2,3,3,3,3,3,3,1,2,3,1];

예시

다음은 코드입니다 -

const array1 = [10,23,53,74,33,56,6,0,43,45,11];
const array2 = [52,46,27,28,4,11,53,6,75,75,22];
const array3 = [26,18,10,12,31,12,5,8,44,34,65];
const transpose = (rank, arr) => {
   return arr.map((el, ind) => {
      return [...(rank[ind] || []), el];
   });
};
const ranks = arr => {
   return arr.map(
      Map.prototype.get,
      [...arr]
      .sort((a, b) => b - a)
      .reduce((r => (m, v) => m.set(v, (r++, m.get(v)) || r))(0), new Map)
   );
};
const findRanks = (...arrs) => {
   return arrs
   .reduce(transpose, [])
   .map(ranks)
   .reduce(transpose, []);
};
console.log(findRanks(array1, array2, array3));

출력

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

[
 [
   3, 2, 1, 1, 1,
   1, 2, 3, 3, 2,
   3
 ],
 [
   1, 1, 2, 2, 3,
   3, 1, 2, 1, 1,
   2
 ],
 [
   2, 3, 3, 3, 2,
   2, 3, 1, 2, 3,
   1
 ]
]