Cho 3 mảng số cùng độ dài. Viết hàm ánh xạ các phần tử tương ứng theo thứ hạng (giảm dần) tại mỗi vị trí.
Ví dụ với 3 mảng đầu vào, kết quả là 3 mảng xếp hạng tương ứng.
Mã thực hiện
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) => arr.map((el, ind) => [...(rank[ind] || []), el]); const ranks = arr => 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) => arrs.reduce(transpose, []).map(ranks).reduce(transpose, []); console.log(findRanks(array1, array2, array3));
Kết quả
[ [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] ]