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

如何在迭代中向外部对象追加元素而非覆盖,保留所有数据?

问题原因

你每次调用func1时,都直接覆盖myobj的name和id属性,普通对象的同名属性会被后续赋值完全覆盖,所以最终只保留最后一次迭代的结果。

修改方案

把myobj从普通对象改成数组(如果需要按顺序存储),或者用唯一键作为索引的对象,每次迭代时新增元素而非覆盖属性,同时确保所有异步操作完成后再打印结果。

修改后的代码(数组版,推荐)

// 改成数组存储多个元素
let myobj = [];
const func1 = async (arg) => {
  // 注意:原代码中result未定义,需确保你已正确获取该变量
  let table_id = result.data.internal_id;
  const response = await axios_Func({ /* 填入你的graphQL query */ });
  console.log(`${response.data.name} - ${table_id}`);
  // 向数组中添加新对象,而非覆盖属性
  myobj.push({
    name: response.data.name,
    id: table_id
  });
  await func2({ query: /* 填入你的graphQL_query */, table_id });
}

const func2 = async (result, table_id) => {
  let dev = await getAllTables({ query: tables(123) });
  let prod = await getAllTables({ query: tables(321) });
  let prod_id = new Set();
  result.data.data.table.table_fields.forEach((d) => {
    if (d.connector != null && !(d.name in dev))
      prod_id.add(prod[d.name]["id"]);
  });
  prod_id = [...prod_id];
  // 修复原代码语法错误:补全map回调的闭合括号
  await Promise.all(prod_id.map((x) => createOne({ query: /* 填入你的graphQL_query(x) */ })));
  // 修复原代码语法错误:修正return语句的括号嵌套
  return Promise.all(prod_id.map((x) => func1({ query: /* 填入你的graphQL_query(x) */ })));
};

const callback = () => console.log(myobj);

const execute = async () => {
  await func1()
  callback()
}

可选方案(对象键值版)

如果需要用唯一标识(比如table_id)作为索引存储,可将myobj改为对象,用唯一键避免覆盖:

let myobj = {};
// 在func1中修改赋值逻辑
myobj[table_id] = {
  name: response.data.name,
  id: table_id
};

额外提示

原代码存在几处语法错误(比如map回调缺少闭合括号、参数传递逻辑模糊),修改时已标注,需你根据实际业务场景补全缺失的变量和查询内容。

内容的提问来源于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.22 13:50:43