Как группировать несколько с помощью lodash - PullRequest
0 голосов
/ 10 апреля 2019

У меня ниже массива

const array = [
  {
    key: 'TSJUcgLGig2UOdjAzlqq4KW5GK6PKXHC2ndw40HYIss7EKsV6nJ',
    location: { lat: '22.7196', lng: '75.8577' },
    address: { city: 'NY', country: 'USA' },
    className: 'FourthActivity',
    deviceId: '1111111111111111'
  },
  { 
    key: 'TSJUcgLGig2UOdjAzlqq4KW5GK6PKXHC2ndw40HYIss7EKsV6nJ',
    location: { lat: '22.7196', lng: '75.8577' },
    address: { city: 'NY', country: 'USA' },
    className: 'FourthActivity',
    deviceId: '222222222222222'
  },
  {
    key: 'TSJUcgLGig2UOdjAzlqq4KW5GK6PKXHC2ndw40HYIss7EKsV6nJ',
    location: { lat: '22.7196', lng: '75.8577' },
    address: { city: 'Landon', country: 'UK' },
    className: 'FourthActivity',
    deviceId: '33333333333'
 }
]

Я должен сгруппировать его, используя два свойства внутри объекта, т.е. address и className.Как я могу сделать это с помощью loadash или javascript?

ожидаемый вывод

[{
  address: { city: 'NY', country: 'USA' }, className: 'FourthActivity',
  count: 2,
  data: [{
    deviceId: 222222222222222,
  }, {
    deviceId: 1111111111111111,
  }]
}, {
  address: { city: 'Landon', country: 'UK' }, className: 'FourthActivity',
  count: 1,
  data: [{
    deviceId: 33333333333,
  }]
}]

Я пробовал это, но не работает

var selectedVehicle = _.filter(array, 'address')

  const selectedVehicles = _.groupBy(selectedVehicle, function(item) {
  return item.makeCode;
})

console.log(selectedVehicles)

1 Ответ

1 голос
/ 10 апреля 2019

Вы можете reduce в объект, создав { address, className, count: 0, data: [] }, если он еще не существует для данной пары адрес / className, а затем получить значения этого объекта:

const array = [
  {
    key: 'TSJUcgLGig2UOdjAzlqq4KW5GK6PKXHC2ndw40HYIss7EKsV6nJ',
    location: { lat: '22.7196', lng: '75.8577' },
    address: { city: 'NY', country: 'USA' },
    className: 'FourthActivity',
    deviceId: '1111111111111111'
  },
  { 
    key: 'TSJUcgLGig2UOdjAzlqq4KW5GK6PKXHC2ndw40HYIss7EKsV6nJ',
    location: { lat: '22.7196', lng: '75.8577' },
    address: { city: 'NY', country: 'USA' },
    className: 'FourthActivity',
    deviceId: '222222222222222'
  },
  {
    key: 'TSJUcgLGig2UOdjAzlqq4KW5GK6PKXHC2ndw40HYIss7EKsV6nJ',
    location: { lat: '22.7196', lng: '75.8577' },
    address: { city: 'Landon', country: 'UK' },
    className: 'FourthActivity',
    deviceId: '33333333333'
 }
]
const output = Object.values(array.reduce((a, { address, className, deviceId }) => {
  const addressClassNameStr = JSON.stringify({ address, className });
  if (!a[addressClassNameStr]) {
    a[addressClassNameStr] = { address, className, count: 0, data: [] };
  }
  a[addressClassNameStr].count++;
  a[addressClassNameStr].data.push({ deviceId });
  return a;
}, {}));
console.log(output);
...