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

หา Top n ค่าสูงสุดจากอาร์เรย์ของอ็อบเจกต์ใน JavaScript

สมมติว่าเรามีอาร์เรย์ของอ็อบเจกต์แบบนี้:

const arr = [
  {"id":0,"start":0,"duration":117,"slide":4,"view":0},
  {"id":0,"start":0,"duration":12,"slide":1,"view":0},
  {"id":0,"start":0,"duration":41,"slide":2,"view":0},
  {"id":0,"start":0,"duration":29,"slide":3,"view":0},
  {"id":0,"start":0,"duration":123,"slide":3,"view":0},
  {"id":0,"start":0,"duration":417,"slide":2,"view":0},
  {"id":0,"start":0,"duration":12,"slide":1,"view":0},
  {"id":0,"start":0,"duration":67,"slide":2,"view":0}
];

เราต้องเขียนฟังก์ชันที่รับอาร์เรย์นี้และคืนค่า top n element ของอาร์เรย์ในอีกอาร์เรย์หนึ่ง (top หมายถึงอ็อบเจกต์ที่มีค่า duration สูงสุด)

มาเขียนโค้ดสำหรับปัญหานี้กัน:

ตัวอย่างโค้ด

const arr = [
  {"id":0,"start":0,"duration":117,"slide":4,"view":0},
  {"id":0,"start":0,"duration":12,"slide":1,"view":0},
  {"id":0,"start":0,"duration":41,"slide":2,"view":0},
  {"id":0,"start":0,"duration":29,"slide":3,"view":0},
  {"id":0,"start":0,"duration":123,"slide":3,"view":0},
  {"id":0,"start":0,"duration":417,"slide":2,"view":0},
  {"id":0,"start":0,"duration":12,"slide":1,"view":0},
  {"id":0,"start":0,"duration":67,"slide":2,"view":0}
];

const topN = (arr, n) => {
  if (n > arr.length) {
    return false;
  }
  return arr
    .slice()
    .sort((a, b) => {
      return b.duration - a.duration;
    })
    .slice(0, n);
};

console.log(topN(arr, 3));
console.log(topN(arr, 4));
console.log(topN(arr, 5));

ผลลัพธ์

ผลลัพธ์ในคอนโซลจะเป็นดังนี้:

[
  { id: 0, start: 0, duration: 417, slide: 2, view: 0 },
  { id: 0, start: 0, duration: 123, slide: 3, view: 0 },
  { id: 0, start: 0, duration: 117, slide: 4, view: 0 }
]
[
  { id: 0, start: 0, duration: 417, slide: 2, view: 0 },
  { id: 0, start: 0, duration: 123, slide: 3, view: 0 },
  { id: 0, start: 0, duration: 117, slide: 4, view: 0 },
  { id: 0, start: 0, duration: 67, slide: 2, view: 0 }
]
[
  { id: 0, start: 0, duration: 417, slide: 2, view: 0 },
  { id: 0, start: 0, duration: 123, slide: 3, view: 0 },
  { id: 0, start: 0, duration: 117, slide: 4, view: 0 },
  { id: 0, start: 0, duration: 67, slide: 2, view: 0 },
  { id: 0, start: 0, duration: 41, slide: 2, view: 0 }
]