Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

การจัดอันดับอาร์เรย์ใน JavaScript

สมมติว่าเรามีอาร์เรย์ 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 ]
]