如何合并对象数组中相同user_id的项并对point属性求和
合并重复user_id对象并累加point的实现方案
核心逻辑
- 用临时哈希表存储已出现的user_id对应的累计数据,避免遍历查找,时间复杂度为O(n)
- 遍历原始数组时,若当前user_id未在哈希表中则存入,若已存在则累加point值
- 最后将哈希表转为普通数组格式即可
PHP 实现(适配你示例中$变量语法)
<?php // 原始输入数组 $data = [ (object)["user_id" => 2, "point" => 2], (object)["user_id" => 16, "point" => 3], (object)["user_id" => 2, "point" => 10], (object)["user_id" => 2, "point" => 10] ]; $tempMap = []; foreach ($data as $item) { $uid = $item->user_id; isset($tempMap[$uid]) ? $tempMap[$uid]->point += $item->point : $tempMap[$uid] = clone $item; } // 转为索引数组得到最终结果 $result = array_values($tempMap); var_dump($result);
如果你的原始数组元素是关联数组而非对象,将代码中
->属性访问替换为[]数组访问即可。
JavaScript 实现
const data = [ { user_id: 2, point: 2 }, { user_id: 16, point: 3 }, { user_id: 2, point: 10 }, { user_id: 2, point: 10 } ]; const tempMap = {}; data.forEach(item => { const uid = item.user_id; tempMap[uid] ? tempMap[uid].point += item.point : tempMap[uid] = {...item}; }); const result = Object.values(tempMap); console.log(result);
内容的提问来源于stack exchange,提问作者Justin
相关产品推荐
相关产品推荐

