You need to enable JavaScript to run this app. JavaScript如何按对象键下划线后的值对值数组分组
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript如何按对象键下划线后的值对值数组分组

按指定键规则实现数组分组

实现思路

整个逻辑没有复杂操作,核心就是三步:

  1. 遍历输入对象的所有条目,拆分每个键拿到下划线后的数字作为分组ID
  2. 把同分组下的原数组值全部合并到对应分组的数组里
  3. 如果要匹配题目给出的去重预期,在合并时用Set去掉重复元素

代码实现

基础合并版本(保留重复元素)

适合同组元素不需要去重的场景:

const inputObj = {"1_1":[1,2],"2_1":[2,1,3],"3_2":[4,5],"4_2":[6,7]};
const result = {};

for (const [key, valList] of Object.entries(inputObj)) {
  // 拆分键:按下划线分割,取后半段转为数字作为分组键
  const groupKey = Number(key.split('_')[1]);
  // 分组不存在则初始化空数组
  if (!result[groupKey]) result[groupKey] = [];
  // 展开当前值数组,追加到分组下
  result[groupKey].push(...valList);
}
// 输出结果:{ 1: [1,2,2,1,3], 2: [4,5,6,7] }

匹配题目预期的去重版本

合并时自动去掉组内重复元素,最终输出和题目给出的预期完全一致:

const inputObj = {"1_1":[1,2],"2_1":[2,1,3],"3_2":[4,5],"4_2":[6,7]};
const result = {};

for (const [key, valList] of Object.entries(inputObj)) {
  const groupKey = Number(key.split('_')[1]);
  // 合并原有分组值和新值,通过Set去重后转回数组
  result[groupKey] = Array.from(new Set([...(result[groupKey] || []), ...valList]));
}
// 输出结果:{ 1: [1,2,3], 2: [4,5,6,7] }

精简reduce写法

如果偏好链式写法,可以用Object.entries结合reduce实现同等逻辑:

const result = Object.entries(inputObj).reduce((acc, [key, valList]) => {
  const groupKey = Number(key.split('_')[1]);
  acc[groupKey] = Array.from(new Set([...(acc[groupKey] || []), ...valList]));
  return acc;
}, {});

注意:题目中写的类数组结构[1: [...], 2: [...]]是对键值映射的简化描述,JavaScript中合法的键值存储是普通对象形式,不存在语法层面的数组数字键写法,上述代码输出的对象结构和预期的映射关系完全等价。


内容的提问来源于stack exchange,提问作者Code ninja

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 14:54:11