提问人:stuwilmur 提问时间:8/31/2022 更新时间:8/31/2022 访问量:55
在 JS 中合并不相交的对象数组
Merge disjoint object arrays in JS
问:
我正在努力寻找一种优雅可靠的方法来合并香草JS或d3.js中的两个数组,其中
- 系列的“行”不一定匹配;
- 对象可能共享某些属性,但不是全部属性;
- “missing”属性填充为 null。
例如,格式为
A =
[
{
year : 2001,
gdp : 1.1,
population : 1100
},
{
year : 2002,
gdp : 1.2,
population : 1200
},
]
B =
[
{
year : 2000,
gdp : 1.0,
rainfall : 100
},
{
year : 2001,
gdp : 1.1,
rainfall : 110
}
]
理想情况下,会结合起来给予
C =
[
{
year : 2000,
gdp : 1.0,
population : null,
rainfall : 10
},
{
year : 2001,
gdp : 1.1,
population : 1100,
rainfall : 110
},
{
year : 2002,
gdp : 1.2,
population : 1200,
rainfall : null
},
]
我通常可以弄清楚这种事情,但这个让我真的陷入困境!
答:
2赞
Nina Scholz
8/31/2022
#1
您可以构建一个包含所有项的数组,获取键并构建一个空对象作为空对象的模式。然后按以下方式分组并获取值。如有必要,应用排序。year
const
a = [{ year: 2001, gdp: 1.1, population: 1100 }, { year: 2002, gdp: 1.2, population: 1200 }],
b = [{ year: 2000, gdp: 1.0, rainfall: 100 }, { year: 2001, gdp: 1.1, rainfall: 110 }],
items = [...a, ...b],
empty = Object.fromEntries(Object.keys(Object.assign({}, ...items)).map(k => [k, null])),
result = Object
.values(items.reduce((r, o) => {
r[o.year] ??= { ...empty };
Object.assign(r[o.year], o);
return r;
}, {}))
.sort((a, b) => a.year - b.year);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
评论
gdp