Computer >> Máy Tính >  >> Lập trình >> Javascript

Nhận giá trị tối đa cho mỗi khóa trong một mảng JavaScript

Giả sử, chúng ta có một mảng các đối tượng như thế này -

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"}
];

Chúng tôi được yêu cầu viết một hàm JavaScript nhận vào một mảng như vậy và trả về một mảng đối tượng.

Mảng phải chứa một đối tượng cho mỗi giá trị duy nhất của thuộc tính "b" trong đó thuộc tính "a" có giá trị cao nhất.

Mã cho điều này sẽ là -

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));

Sau đây là kết quả trên bảng điều khiển -

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