我的问题是我从服务器获取信息 - 对象数组。我想把每个对象从数组“推”到新对象,因此inupt看起来:
[{key : value}],[{key2:value2}]....
输出应如下所示:
{key:value,
key2: value2 ... }
我不知道“推”的语法,使新对象看起来像我的欲望输出。
答案 0 :(得分:3)
这是一个有趣的小技巧:
const input = [{key: 'value'}, {key2: 'value2'}];
// Object.assign() always returns any with rest arguments,
// you should cast to the actual type you're expecting here.
const result = Object.assign({}, ...input) as MyApiType;
console.log(result);
Object.assign()
将采用任意数量的参数,并合并它们。
Object.assign({}, {hello: 'world'}, {goodbye: 'world'});
// {hello: 'world', goodbye: 'world'}
我们将一个空对象作为第一个参数传递,并将传播 input
传递给其余参数。
{}, ...input
?为什么不只是...input
?因为Object.assign()
具有破坏性,它会改变传递给它的第一个参数。如果我打电话给Object.assign(...input)
,input[0]
会被更改。我们希望避免更改输入,因为对于那些从外部查看代码的人来说,这通常是意外行为。
答案 1 :(得分:2)
你要找的不是推送把 Array.reduce (普通的旧js)。它允许您将数组减少为单个对象。你可以这样使用它。
let data: [{ key: string, value: string }] = [{
key: '1',
value: '2'
}];
let obj = data.reduce((prev, current) => {
prev[current.key] = current.value;
return prev;
}, {});