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

Nhóm mảng theo các giá trị bằng nhau JavaScript

Giả sử, chúng ta có một mảng các ký tự chuỗi / số chứa một số giá trị trùng lặp likethis -

const array = ['day', 'night', 'afternoon', 'night', 'noon', 'night', 'noon', 'day', 'afternoon', 'day', 'night'];

Chúng tôi bắt buộc phải viết một nhóm hàmSimilar () nhận trong mảng này và trả về một mảng mới trong đó tất cả các mục lặp lại được nhóm lại với nhau trong một mảng con dưới dạng phần tử đầu tiên và tổng số của chúng trong mảng ban đầu là phần tử thứ hai.

Vì vậy, đối với ví dụ này, đầu ra phải là -

[
   [ 'day', 3 ],
   [ 'night', 4 ],
   [ 'afternoon', 2 ],
   [ 'noon', 2 ]
]

Hãy viết mã cho chức năng này. Chúng tôi sẽ sử dụng hàm Array.prototype.map () để tạo một mảng mới, bắt buộc, và chúng tôi sẽ sử dụng một Bản đồ để theo dõi các mục lặp lại trong mảng -

Ví dụ

const array = ['day', 'night', 'afternoon', 'night', 'noon', 'night',
'noon', 'day', 'afternoon', 'day', 'night'];
const groupSimilar = arr => {
   return arr.reduce((acc, val) => {
      const { data, map } = acc;
      const ind = map.get(val);
      if(map.has(val)){
         data[ind][1]++;
      } else {
         map.set(val, data.push([val, 1])-1);
      }
      return { data, map };
   }, {
      data: [],
      map: new Map()
   }).data;
};
console.log(groupSimilar(array));

Đầu ra

Đầu ra trong bảng điều khiển sẽ là -

[
   [ 'day', 3 ],
   [ 'night', 4 ],
   [ 'afternoon', 2 ],
   [ 'noon', 2 ]
]