我有一个像这样的对象数组:
[
{country: 'a', region: 1}
{country: 'a', region: 2}
{country: 'a', region: 3}
{country: 'b', region: 4}
{country: 'b', region: 5}
{country: 'c', region: 6}
{country: 'd', region: 7}
{country: 'e', region: 8}
]
我想以这样的数组结束:
[
{country: 'a', region: [1, 2, 3]}
{country: 'b', region: [4, 5]}
{country: 'c', region: [6]}
{country: 'd', region: [7]}
{country: 'e', region: [8]}
]
我一直在尝试以下操作,但我被困在我想将结果推送到现有 byCountry 数组中的部分...
另外我觉得 filter 可能不是最好的功能,它可能比我编写它的方式简单得多。
let byCountry = []
regions.forEach( (region) => {
const filter = byCountry.filter( country => country.country === region.country )
if (filter.length > 0) {
const filteredCountry = filter[0]['country']
const result = _.find(byCountry, country => {
return country.country === filteredCountry
})
// stuck here
} else {
const newCountry = {
country: region.country,
regions: [region.region],
}
byCountry.push(newCountry)
}
})
您可以将数组转换为将国家/地区映射到多个区域的哈希图,{<country>: Array<regions>}
然后将其转换回数组:
const records = [
{country: 'a', region: 1},
{country: 'a', region: 2},
{country: 'a', region: 3},
{country: 'b', region: 4},
{country: 'b', region: 5},
{country: 'c', region: 6},
{country: 'd', region: 7},
{country: 'e', region: 8}
];
const regionsByCountry = new Map();
records.forEach(record => {
if (!regionsByCountry.has(record.country)) {
regionsByCountry.set(record.country, []);
}
regionsByCountry.get(record.country).push(record.region);
});
const merged = Array.from(regionsByCountry)
.map(([country, region]) => ({country,region}));
console.log(merged)
您可以使用Map
具有可读 API的现代语言,也可以使用普通对象文字{}
。
地图文档:https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句