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

ดึงค่าสูงสุดต่อคีย์ในอาร์เรย์ JavaScript

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

const arr = [
  {a:1, b:"apples"},
  {a:3, b:"apples"},
  {a:4, b:"apples"},
  {a:1, b:"bananas"},
  {a:3, b:"bananas"},
  {a:5, b:"bananas"},
  {a:6, b:"bananas"},
  {a:3, b:"oranges"},
  {a:5, b:"oranges"},
  {a:6, b:"oranges"},
  {a:10, b:"oranges"}
];

เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์แบบนี้และคืนค่าอาร์เรย์ของออบเจกต์

อาร์เรย์ควรมีออบเจกต์สำหรับแต่ละค่า unique ของพร็อพเพอร์ตี "b" โดยที่พร็อพเพอร์ตี "a" มีค่าสูงสุด

โค้ดสำหรับเรื่องนี้จะเป็น:

const arr = [
  {a:1, b:"apples"},
  {a:3, b:"apples"},
  {a:4, b:"apples"},
  {a:1, b:"bananas"},
  {a:3, b:"bananas"},
  {a:5, b:"bananas"},
  {a:6, b:"bananas"},
  {a:3, b:"oranges"},
  {a:5, b:"oranges"},
  {a:6, b:"oranges"},
  {a:10, b:"oranges"}
];
const pickHighest = arr => {
  const res = [], map = {};
  arr.forEach(el => {
    if (!(el['b'] in map)) {
      map[el['b']] = res.push(el) - 1;
      return;
    }
    if (res[map[el['b']]]['a'] < el['a']) {
      res[map[el['b']]] = el;
    }
  });
  return res;
};
console.log(pickHighest(arr));

ผลลัพธ์บนคอนโซล:

[ { a: 4, b: 'apples' }, { a: 6, b: 'bananas' }, { a: 10, b: 'oranges' } ]