我有 3 个数组:
var countries = ['Montenegro', 'Spain', 'Belgium']
var years = ['2000', '2001', '2002', '2003'];
var death = ['cancer', 'measles'];
和一个对象数组:
var values = [
{country:'Montenegro', year:'2000', death:'cancer', number:'50'},
{country:'Montenegro', year:'2001', death:'cancer', number:'60'},
{country:'Montenegro', year:'2002', death:'cancer', number:'70'},
{country:'Montenegro', year:'2003', death:'cancer', number:'80'},
{country:'Spain', year:'2000', death:'cancer', number:'NaN'},
{country:'Spain', year:'2001', death:'cancer', number:'110'},
{country:'Spain', year:'2002', death:'cancer', number:'120'},
{country:'Spain', year:'2003', death:'cancer', number:'130'},
{country:'Belgium', year:'2000', death:'cancer', number:'70'},
{country:'Belgium', year:'2001', death:'cancer', number:'80'},
{country:'Belgium', year:'2002', death:'cancer', number:'90.5'},
{country:'Montenegro', year:'2000', death:'measles', number:''},
{country:'Montenegro', year:'2001', death:'measles', number:'1'},
{country:'Montenegro', year:'2002', death:'measles', number:'2'},
{country:'Montenegro', year:'2003', death:'measles', number:'3'},
{country:'Spain', year:'2000', death:'measles', number:'2'},
{country:'Spain', year:'2001', death:'measles', number:'3'},
{country:'Spain', year:'2002', death:'measles', number:'NaN'},
{country:'Spain', year:'2003', death:'measles', number:'5'}
];
我想要的是一个“完整”的对象数组,其中包含三个数组中存在的所有可能的值组合。
values
事实上,不包含与以下内容相关的对象:
{country:'Belgium', year:'2003', death:'cancer', ...},
{country:'Belgium', year:'2000', death:'measles', ...},
{country:'Belgium', year:'2001', death:'measles', ...},
{country:'Belgium', year:'2002', death:'measles', ...},
{country:'Belgium', year:'2003', death:'measles', ...}
所以我想得到这个新对象(缺失的数据设置为NaN
):
var valuesComplete = [
{country:'Montenegro', year:'2000', death:'cancer', number:'50'},
{country:'Montenegro', year:'2001', death:'cancer', number:'60'},
{country:'Montenegro', year:'2002', death:'cancer', number:'70'},
{country:'Montenegro', year:'2003', death:'cancer', number:'80'},
{country:'Spain', year:'2000', death:'cancer', number:'NaN'},
{country:'Spain', year:'2001', death:'cancer', number:'110'},
{country:'Spain', year:'2002', death:'cancer', number:'120'},
{country:'Spain', year:'2003', death:'cancer', number:'130'},
{country:'Belgium', year:'2000', death:'cancer', number:'70'},
{country:'Belgium', year:'2001', death:'cancer', number:'80'},
{country:'Belgium', year:'2002', death:'cancer', number:'90.5'},
{country:'Belgium', year:'2003', death:'cancer', number:NaN}, // <--
{country:'Montenegro', year:'2000', death:'measles', number:''},
{country:'Montenegro', year:'2001', death:'measles', number:'1'},
{country:'Montenegro', year:'2002', death:'measles', number:'2'},
{country:'Montenegro', year:'2003', death:'measles', number:'3'},
{country:'Spain', year:'2000', death:'measles', number:'2'},
{country:'Spain', year:'2001', death:'measles', number:'3'},
{country:'Spain', year:'2002', death:'measles', number:'NaN'},
{country:'Spain', year:'2003', death:'measles', number:'5'},
{country:'Belgium', year:'2000', death:'measles', number:NaN}, // <--
{country:'Belgium', year:'2001', death:'measles', number:NaN}, // <--
{country:'Belgium', year:'2002', death:'measles', number:NaN}, // <--
{country:'Belgium', year:'2003', death:'measles', number:NaN} // <--
];
新数组包含 24 个元素 = countries.length *years.length *death.length
。
最好的方法是什么?
最佳答案
您可以检查所有可能的组合。使用map
循环遍历每个数组并使用find
搜索它
var countries = ['Montenegro', 'Spain', 'Belgium']
var years = ['2000', '2001', '2002', '2003'];
var death = ['cancer', 'measles'];
var values = [
{country:'Montenegro', year:'2000', death:'cancer', number:'50'},
{country:'Montenegro', year:'2001', death:'cancer', number:'60'},
{country:'Montenegro', year:'2002', death:'cancer', number:'70'},
{country:'Montenegro', year:'2003', death:'cancer', number:'80'},
{country:'Spain', year:'2000', death:'cancer', number:'NaN'},
{country:'Spain', year:'2001', death:'cancer', number:'110'},
{country:'Spain', year:'2002', death:'cancer', number:'120'},
{country:'Spain', year:'2003', death:'cancer', number:'130'},
{country:'Belgium', year:'2000', death:'cancer', number:'70'},
{country:'Belgium', year:'2001', death:'cancer', number:'80'},
{country:'Belgium', year:'2002', death:'cancer', number:'90.5'},
{country:'Montenegro', year:'2000', death:'measles', number:''},
{country:'Montenegro', year:'2001', death:'measles', number:'1'},
{country:'Montenegro', year:'2002', death:'measles', number:'2'},
{country:'Montenegro', year:'2003', death:'measles', number:'3'},
{country:'Spain', year:'2000', death:'measles', number:'2'},
{country:'Spain', year:'2001', death:'measles', number:'3'},
{country:'Spain', year:'2002', death:'measles', number:'NaN'},
{country:'Spain', year:'2003', death:'measles', number:'5'}
];
var valuesComplete = [countries, years, death].reduce((c, v) => [].concat(...c.map(o => v.map(x => [].concat(o, x)))))
.map(o => values.find(v => v.country === o[0] && v.year === o[1] && v.death === o[2]) || {country: o[0],year: o[1],death: o[2],number: NaN})
console.log(valuesComplete);
关于javascript - 根据其他数组的内容创建一个对象数组 "complete",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50653650/