如何在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
相关产品推荐
相关产品推荐

