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

如何在JavaScript中基于两个数组构造指定结构的复杂对象字面量

实现方案

原有代码问题

  • categories字段无需循环插入,直接完整映射countries数组即可,原有嵌套循环会重复插入15条重复的国家数据,不符合要求
  • 初始output的series数组仅预设了1个空对象,无法匹配medals数组的3个奖牌类型,结构不匹配
  • 循环逻辑顺序错误,应当优先遍历所有奖牌类型生成对应series子项,再遍历国家为每个子项填充对应年份

最简实现代码

用数组高阶函数实现,逻辑清晰简洁:

const countries= ['Korea', 'United States', 'Germany', 'Canada', 'Austria'];
const medals = ['Gold medal', 'Silver medal', 'Bronze medal'];

// 生成1980-2023区间的随机年份
const getRandomYear = () => Math.floor(Math.random() * 44) + 1980;

const output = {
  categories: [...countries],
  series: medals.map(medal => ({
    medal,
    year: countries.map(getRandomYear)
  }))
};

兼容版for循环实现

如果需要兼容不支持ES6+语法的环境,可使用普通for循环实现:

const countries= ['Korea', 'United States', 'Germany', 'Canada', 'Austria'];
const medals = ['Gold medal', 'Silver medal', 'Bronze medal'];

function getRandomYear() {
  return Math.floor(Math.random() * 44) + 1980;
}

const output = {
  categories: [],
  series: []
};

// 填充分类字段
for (let i = 0; i < countries.length; i++) {
  output.categories.push(countries[i]);
}

// 填充奖牌数据
for (let j = 0; j < medals.length; j++) {
  const currentMedal = {
    medal: medals[j],
    year: []
  };
  // 为每个国家生成对应随机年份
  for (let k = 0; k < countries.length; k++) {
    currentMedal.year.push(getRandomYear());
  }
  output.series.push(currentMedal);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 01:27:03