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

如何将对象数组中每个对象转换为id-value结构数组并分别输出?

问题:将对象数组中每个对象转换为独立的{id, value}结构数组

现有一个包含多属性的对象数组,需要将每个对象的属性键作为id值、属性值作为value值,转换为由{id: 原键, value: 原值}组成的数组。当前代码会把所有转换结果合并到一个数组中,需求是每个原对象对应一个单独的目标数组。

现有代码

var list = [
  {
    you: 100,
    me: 75,
    foo: 116,
    bar: 15,
  },
  {
    you: 234,
    me: 33,
    foo: 356,
    bar: 1,
  },
  {
    you: 567,
    me: 77,
    foo: 99,
    bar: 20,
  },
];

const func1 = () => {
  let field_arr = [];
  for (const obj of list) {
    field_arr.push(
      { id: "you", value: obj.you },
      { id: "me", value: obj.me },
      { id: "foo", value: obj.foo },
      { id: "bar", value: obj.bar }
    );
  }
  func2(field_arr);
};
const func2 = async (vars) => {
  console.log(vars);
};
func1();

期望输出

[
  { id: 'you', value: 100 },
  { id: 'me', value: 75 },
  { id: 'foo', value: 116 },
  { id: 'bar', value: 15 },
]
[
  { id: 'you', value: 234 },
  { id: 'me', value: 33 },
  { id: 'foo', value: 356 },
  { id: 'bar', value: 1 },
]
[
  { id: 'you', value: 567 },
  { id: 'me', value: 77 },
  { id: 'foo', value: 99 },
  { id: 'bar', value: 20 }
]

解决方案

方法1:使用map和Object.entries简化转换(推荐)

利用map遍历原数组,对每个对象用Object.entries获取键值对,再转换为目标结构,最终得到一个二维数组,每个子数组对应原数组中的一个对象。

var list = [
  { you: 100, me: 75, foo: 116, bar: 15 },
  { you: 234, me: 33, foo: 356, bar: 1 },
  { you: 567, me: 77, foo: 99, bar: 20 },
];

const func1 = () => {
  // 每个原对象转换为独立的{id, value}数组
  const result = list.map(obj => 
    Object.entries(obj).map(([key, value]) => ({ id: key, value }))
  );
  // 逐个输出每个目标数组,符合期望输出格式
  result.forEach(arr => console.log(arr));
  // 也可以把二维数组传给func2做后续处理
  func2(result);
};

const func2 = async (vars) => {
  // 这里可以根据需求处理二维数组
  console.log('接收的二维数组:', vars);
};

func1();

方法2:修改原有循环逻辑

保持原有的循环写法,对每个原对象单独生成一个目标数组,再将这些数组收集起来,而不是把单个对象直接push到大数组中。

var list = [
  { you: 100, me: 75, foo: 116, bar: 15 },
  { you: 234, me: 33, foo: 356, bar: 1 },
  { you: 567, me: 77, foo: 99, bar: 20 },
];

const func1 = () => {
  let field_arr = [];
  for (const obj of list) {
    // 为当前对象单独创建目标数组
    const singleObjArr = [
      { id: "you", value: obj.you },
      { id: "me", value: obj.me },
      { id: "foo", value: obj.foo },
      { id: "bar", value: obj.bar }
    ];
    field_arr.push(singleObjArr);
  }
  // 逐个输出每个目标数组
  field_arr.forEach(arr => console.log(arr));
  func2(field_arr);
};

const func2 = async (vars) => {
  console.log('接收的二维数组:', vars);
};

func1();

两种方法都能实现需求:每个原对象对应一个独立的{id, value}结构数组,最终输出符合期望的格式。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 11:50:00