问题描述
我有 2 个数组(命名国家和奖牌),其中包含需要放入一个对象字面量中的数据,以便获得以下输出
let countries= ['Korea','United States','Germany','Canada','Austria'];
let medals = ['Gold medal','Silver medal','bronze medal'];
let output = {
categories: [],series: [
{
medal: '',year: [],}
]
};
for(let i = 0; i < countries.length; i++){
for(let j= 0; j < medals.length; j++){
output.categories.push(countries[i]);
output.series[j].medal = medals[j];
output.series[j].year.push('1993');//any random year
}
}
//desired output
output = {
categories: ['Korea','Austria'],series: [
{
medal: 'Gold medal',year: [1993,1996,2014,2017,1999],//1993 for Korea,1996 for USA,..
},{
medal: 'Silver medal',year: [1990,2012,1993],},{
medal: 'bronze medal',year: [1987,1992,2013,2003],],};
年份是随机选择的。
解决方法
既然您已经创建了一个 output
对象
1) 您可以使用 spread syntax 直接复制 output.categories
数组中的所有元素。
2)对于output.series
,您可以使用forEach来推送一个对象(等于奖牌数组长度的长度)。
medals.forEach((s) => {
output.series.push({
medal: s,// Second approach using Array.from
year: Array.from({ length: countries.length },() =>
randomNumber(1900,2021)
),});
});
let countries = ["Korea","United States","Germany","Canada","Austria"];
let medals = ["Gold medal","Silver medal","Bronze medal"];
let output = {
categories: [],series: [],};
output.categories = [...countries];
function randomNumber(min,max) {
return Math.floor(Math.random() * (max - min + 1) + min);
}
medals.forEach((s) => {
output.series.push({
medal: s,year: Array(countries.length)
.fill(0)
.map(() => randomNumber(1900,2021)),});
});
console.log(output);
let countries= ['Korea','United States','Germany','Canada','Austria'];
let medals = ['Gold medal','Silver medal','Bronze medal'];
let output = {
categories: countries,series: medals.map(medal => ({
medal,year: [ 1993 ]
}))
};
console.log(output);