Typescript - 从数组生成TS对象

时间:2017-04-16 20:57:20

标签: arrays object typescript

我的问题是我从服务器获取信息 - 对象数组。我想把每个对象从数组“推”到新对象,因此inupt看起来:

[{key : value}],[{key2:value2}]....

输出应如下所示:

{key:value,
 key2: value2 ... }

我不知道“推”的语法,使新对象看起来像我的欲望输出。

2 个答案:

答案 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;
}, {});