我是TypeScript的新手,我正在努力完成一项基本任务。我有一个这样的对象数组:
// Dummy data
let boop = [
{a: 5, b: 10},
{a: 7, c: 8},
{a: 6, b: 7, c: 9}
];
我想把它变成这样
//Desired result: {a: [5, 7, 6], b: [10, null, 7], c: [null, 8, 9]};
请注意,如果对象中缺少该值,则用null表示。我希望首先我需要知道我计划填充的所有字段,所以从下面开始:
// Get unique keys
let uniqueKeys = Object.keys(boop.reduce((result, row) => {
return Object.assign(result, row);
}, {}))
接下来,我创建一个对象来保存结果。
// To hold result
var result: Record<string, any[]> = {};
最后,我迭代了我的数组,对于每个对象,我尝试提取字段(如果它存在)并将其推入最终对象中的数组。如果字段是undefined
,我使用null
并推送它。
boop.forEach(item => { // Loop through each item
for(let field of uniqueKeys){ // Loop through each field for each item
let value = item[field as keyof typeof item]; // Get value (if it exists!)
value ??= null;
result[field].push(value);
}
})
这会产生错误:
[ERR]:undefined不是对象(正在计算'result[field]. push')
问题似乎是推送,因为当我使用result[field] = [1, 2, 3];
时,我可以为我的对象赋值,没有问题。
如何正确地将值推入对象中的每个数组?
1条答案
按热度按时间gg58donl1#
如果其他人遇到类似的问题,解决方案是我需要首先用空数组初始化我的对象。比如说
因此,完整的代码是,
结果:
不完美,因为我有
undefined
而不是null
,但这是另一个问题...