arrays - 如何根据多个值对数据数组进行分组?
问题描述
我想根据类型和type_id对数据进行分组这里是数组
var addArray = [
{
"id": 24,
"language_id": 3,
"type": "service",
"type_id": 2,
"key": "service seeker",
"value": " need service"
},
{
"id": 23,
"language_id": 3,
"type": "service",
"type_id": 2,
"key": "phone",
"value": "phone number"
},
{
"id": 24,
"language_id": 3,
"type": "service",
"type_id": 7,
"key": "tester",
"value": "service tester"
}
{
"id": 19,
"language_id": 3,
"type": "offer",
"type_id": 4,
"key": "source",
"value": "resource"
}
]
我已经尝试过let result = _.groupBy(addArray,'type')
根据类型对数据进行分组,但我需要按类型和 type_id 进行分组
预期产出
解决方案
如果您需要基于两个或多个属性的平面分组,请使用_.groupBy()
回调将属性组合为字符串:
const addArray = [{"id":24,"language_id":3,"type":"service","type_id":2,"key":"service seeker","value":" need service"},{"id":23,"language_id":3,"type":"service","type_id":2,"key":"phone","value":"phone number"},{"id":24,"language_id":3,"type":"service","type_id":7,"key":"tester","value":"service tester"},{"id":19,"language_id":3,"type":"offer","type_id":4,"key":"source","value":"resource"}]
const result = _.groupBy(addArray, o => `${o.type}-${o.type_id}`)
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
如果您需要多级分组,请先按 分组type
,然后使用 映射组,然后_.values()
按 再次分组type_id
:
const { flow, partialRight: pr, groupBy, mapValues } = _
const fn = flow(
pr(groupBy, 'type'),
pr(mapValues, g => groupBy(g, 'type_id'))
)
const addArray = [{"id":24,"language_id":3,"type":"service","type_id":2,"key":"service seeker","value":" need service"},{"id":23,"language_id":3,"type":"service","type_id":2,"key":"phone","value":"phone number"},{"id":24,"language_id":3,"type":"service","type_id":7,"key":"tester","value":"service tester"},{"id":19,"language_id":3,"type":"offer","type_id":4,"key":"source","value":"resource"}]
const result = fn(addArray)
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
推荐阅读
- sql - 如何在 3 个不同的列中“仅获取前 1 行”每个 ID?
- python - 如何将我的文件大小和名称放入字典
- php - 接口类型提示和继承的奇怪行为
- r - 如何跳过循环中的迭代?
- firebase - 我想了解使用 FIREBASE 运行的应用程序的定价
- ruby-on-rails - 如何使用 Ruby 更新 couchdb 文档
- ms-access - 如何阻止用户编辑 MS Access 表中的单行?
- c++ - 如何在 Windows 10 上获得不可见的边框大小以调整窗口大小
- ionic-framework - 使用 google 登录时出现错误“10”
- c# - 如何动态创建json?