Computer >> Máy Tính >  >> Lập trình >> Javascript

Xếp hạng mảng JavaScript - JavaScript

Giả sử, chúng ta có ba mảng JavaScript gồm Number như sau -

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];

Độ dài của tất cả các mảng sẽ luôn bằng nhau.

Chúng tôi bắt buộc phải viết một hàm JavaScript để trong bất kỳ số lượng mảng nào như vậy ánh xạ các phần tử tương ứng của một mảng hiện có theo thứ hạng của chúng (tức là thứ tự của chúng theo nghĩa giảm dần).

Do đó, đối với các mảng ở trên, kết quả đầu ra sẽ giống như -

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];

Ví dụ

Sau đây là mã -

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));

Đầu ra

Điều này sẽ tạo ra kết quả sau trên bảng điều khiển -

[
 [
   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
 ]
]