สมมติว่าเรามีอาร์เรย์ JavaScript ของตัวเลข 3 อาร์เรย์ดังนี้:
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 ที่ในอาร์เรย์จำนวนใดก็ตาม จับคู่องค์ประกอบที่ตรงกันของอาร์เรย์ที่มีอยู่ตามอันดับ (rank) ของพวกเขา (คือ ลำดับในมุมมองการลดลง)
ดังนั้น สำหรับอาร์เรย์ข้างต้น ผลลัพธ์ควรเป็นดังนี้:
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 ] ]