javascript - 如何使用 lodash 对多个进行分组
问题描述
我有以下数组
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)
解决方案
您可以reduce
进入一个对象,{ address, className, count: 0, data: [] }
如果给定的地址/类名对尚不存在,则创建该对象,然后获取该对象的值:
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);
推荐阅读
- apache-kafka - 如何编辑 JMX 配置文件以使 Kafka 公开主题?
- php - 使用 PHP Oauth 类创建 API 身份验证
- regex - 试图从 Postman 中的 post 调用中获取会话值:TypeError: postman.getResponseHeader is not a function
- r - 使用R查找哪些点位于缓冲区内?
- python - 我无法将字段命名为“来自”
- javascript - 由于“X-frame-options”设置为“拒绝”,Facebook 评论在网站的所有页面上被禁用
- swift - 我需要帮助,我尝试在我的 ios 应用程序中添加一个与 Cloudkit 一起使用的搜索栏
- python - 如何更改网格(字符串数组)中的单个字母?
- c# - 为什么即使未启用 CORS,HTTP 请求也会在 Action 中处理?
- vbscript - 用于数据库迁移的 VBScript 未更改日期和时间