0: {uid: 517, uid_txt: "江苏曹总", size: "44", amount: "71", price: "133", cate: 0, fee_money: "5",…} 1: {uid: 517, uid_txt: "江苏曹总", size: "45", amount: "132", price: "136", fee_money: "5", fee_money_c: "3",…} 2: {uid: 517, uid_txt: "江苏曹总", size: "43", amount: "119", price: "130", fee_money: "5", fee_money_c: "3",…} 3: {uid: 517, uid_txt: "江苏曹总", size: "44", amount: "118", price: "133", fee_money: "5", fee_money_c: "3",…} 4: {uid: 517, uid_txt: "江苏曹总", size: "", amount: "440", price: "", cate: 0, fee_money: "",…}如果数组的中的size.price,fee_money三项都相同的时候就合并,并且累计amout,total_money两项的值,组成新的数组
时间: 2025-06-03 18:00:14 浏览: 19
<think>我们在处理一个对象数组(或字典列表),每个对象有size,price,fee_money,amount,total_money等属性。要求:将数组中size、price和fee_money相同的项合并为一项,合并后的项中,amount值为所有相同项的amount之和,total_money为所有相同项的total_money之和。思路:1.创建一个空对象(或Map)作为临时存储,用于根据size,price,fee_money组合来分组。2.遍历数组中的每一项。3.对于每一项,生成一个基于size,price,fee_money的唯一键(例如:`${size}_${price}_${fee_money}`)作为分组的依据。4.检查临时存储中是否已有该键对应的组,如果没有,则创建一个新对象(包含当前项的size,price,fee_money,以及amount和total_money的初始值)。如果已有,则将当前项的amount和total_money累加到该组。5.遍历完成后,将临时存储中的所有值取出作为结果数组。注意:在JavaScript中,使用对象或Map来存储,在Python中可以使用字典。下面分别用JavaScript和Python实现:</think>
### JavaScript实现
```javascript
function mergeItems(items) {
const mergedMap = new Map();
items.forEach(item => {
const key = `${item.size}_${item.price}_${item.fee_money}`;
if (mergedMap.has(key)) {
// 已存在相同组合,累加amount和total_money
const existing = mergedMap.get(key);
existing.amount += item.amount;
existing.total_money += item.total_money;
} else {
// 新组合,创建副本
mergedMap.set(key, {
size: item.size,
price: item.price,
fee_money: item.fee_money,
amount: item.amount,
total_money: item.total_money
});
}
});
return Array.from(mergedMap.values());
}
// 使用示例
const originalItems = [
{ size: 10, price: 100, fee_money: 5, amount: 2, total_money: 200 },
{ size: 10, price: 100, fee_money: 5, amount: 3, total_money: 300 },
{ size: 20, price: 150, fee_money: 7, amount: 1, total_money: 150 }
];
const mergedItems = mergeItems(originalItems);
console.log(mergedItems);
/* 输出:
[
{ size:10, price:100, fee_money:5, amount:5, total_money:500 },
{ size:20, price:150, fee_money:7, amount:1, total_money:150 }
]
*/
```
### Python实现
```python
def merge_items(items):
merged_dict = {}
for item in items:
# 创建基于三个字段的不可变键
key = (item['size'], item['price'], item['fee_money'])
if key in merged_dict:
# 已存在相同组合,累加amount和total_money
merged_dict[key]['amount'] += item['amount']
merged_dict[key]['total_money'] += item['total_money']
else:
# 新组合,创建深度拷贝
merged_dict[key] = {
'size': item['size'],
'price': item['price'],
'fee_money': item['fee_money'],
'amount': item['amount'],
'total_money': item['total_money']
}
return list(merged_dict.values())
# 使用示例
if __name__ == "__main__":
original_items = [
{"size": 10, "price": 100, "fee_money": 5, "amount": 2, "total_money": 200},
{"size": 10, "price": 100, "fee_money": 5, "amount": 3, "total_money": 300},
{"size": 20, "price": 150, "fee_money": 7, "amount": 1, "total_money": 150}
]
merged_items = merge_items(original_items)
print(merged_items)
# 输出:
# [
# {'size':10, 'price':100, 'fee_money':5, 'amount':5, 'total_money':500},
# {'size':20, 'price':150, 'fee_money':7, 'amount':1, 'total_money':150}
# ]
```
### 关键说明:
1. **核心逻辑**:使用`size+price+fee_money`组合作为唯一键,通过Map/字典实现快速查找
2. **去重方式**:
- JavaScript: 使用`Map`对象存储合并结果,通过字符串模板生成键
- Python: 使用元组作为字典键,确保哈希可用性
3. **字段处理**:
- 保持原始尺寸(size)、价格(price)、费用(fee_money)不变
- 累加数量(amount)和总金额(total_money)
4. **时间复杂度**:$O(n)$,仅需一次数组遍历
5. **内存使用**:最坏情况$O(n)$,相同键值越多内存使用越小
> 在处理财务和库存数据时,这种合并操作能有效减少重复条目并聚合关键指标,常用于报表生成和数据分析场景[^1]。
阅读全文