javascript - 合并javascript数组中的重复对象及其出现频率
问题描述
我有一个看起来像这样的 javascript 数组
[
{ quantity: 1, name: 'Menu sandwichs' },
{ quantity: 1, name: 'Menu sandwichs' },
{ quantity: 1, name: 'Menu sandwichs' },
{ quantity: 1, name: 'Pizza' },
{ quantity: 1, name: 'Piza' }
]
我想得到这个数组
[
{ quantity:3, name:'Menu Sandwich' },
{ quantity:2, name:'Pizza' }
]
你能帮帮我吗?
解决方案
假设原始数组中的数量有时可能不是 1:
const mergeQuantities = (values) => {
const result = {}
values.forEach(({ quantity, name }) => {
result[name] = result[name] || { name, quantity: 0 }
result[name].quantity += quantity
})
return Object.values(result)
}
这将创建一个新对象,其中属性名称name
来自数组中的每个事物。然后遍历列表,将每个添加quantity
到结果中。最后,它丢弃键,只留下您想要的形式的数组。
推荐阅读
- reactjs - 单击提交按钮时反应显示错误
- c# - 在 DateTimeOffset 列而不是 DateTime(2) 中存储 UTC 日期有什么意义吗?
- python - ProgrammingError 1064 在 Python 中使用 MySQL 从现有表中执行 CREATE TABLE AS SELECT
- c++ - 是否可以使用前缀表示法调用 << 运算符?
- python - Jupyter 笔记本 - 无法安装
- css - 将 CSS 编辑为 ngb-datepicker (Angular)
- 3d - 3D人脸输入的格式是什么?
- swift - ARKit – 如何将 ARImageTrackingConfiguration 与 ARFaceTrackingConfiguration 结合使用?
- python - Python函数在调用时不返回reuslt,没有输出。我究竟做错了什么
- c# - 如何从 ac# 数组中的第二项切片元素?