You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并对象数组中相同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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 11:48:03