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

如何将值为数组的键值对对象转换为多组键值对对象结构?

解决方案:将键值对数组转换为指定的多组对象结构

嘿,我完全明白你想要实现的目标结构了!你的思路方向是对的,只是还需要调整下处理逻辑,把原对象的每个键值对转换成你要的嵌套格式。下面是具体的实现方法:

完整代码示例

const originalObj = { status: ["new", "old"], place: ["york", "blah"] };

const transformedObj = Object.entries(originalObj).reduce((acc, [key, values], idx) => {
  // 生成 newObj1、newObj2 这类动态键名
  const newKey = `newObj${idx + 1}`;
  // 将数组中的每个元素转换为 { 原键名: 元素值 } 的对象,再组成数组
  acc[newKey] = values.map(val => ({ [key]: val }));
  return acc;
}, {});

console.log(transformedObj);
// 输出结果:
// {
//   newObj1: [ { status: 'new' }, { status: 'old' } ],
//   newObj2: [ { place: 'york' }, { place: 'blah' } ]
// }

代码逻辑拆解

  1. Object.entries() 简化键值对获取:相比你之前用 Object.keys() 再手动取 value,Object.entries() 直接把原对象转换成 [[key1, valueArray1], [key2, valueArray2]] 这样的二维数组,处理起来更便捷。
  2. reduce() 构建结果对象:我们以空对象作为初始值,遍历每个键值对时,逐步往里面添加新的键值对。
  3. 动态生成键名:利用遍历的索引 idx,拼接出 newObj1、newObj2 这类符合要求的键名。
  4. map() 转换元素格式:对每个值数组,用 map() 把每个元素转换成 { [key]: val } 的形式——这里的 [key] 是ES6的计算属性名,能动态设置对象的键名,完美适配原对象的不同键。

对比你的原有尝试

你之前的代码 Object.keys(value).map((key) => [key, value[key]]) 只是把原对象拆成了键值对数组,但没有进一步处理成目标的嵌套结构。上面的代码结合 reduce 和 map,正好补上了这个环节,最终生成你想要的结构。

内容的提问来源于stack exchange,提问作者Nikhil Bharadwaj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 15:28:12