将对象推入数组重复上一个条目

时间:2019-09-25 10:58:35

标签: typescript

我有一个非常复杂的对象,我必须部分填充来自API的数据。

假设我的对象看起来像这样

{
   attribute1: number, 
   attribute2: number, 
   static1: number,
   static2: number,
}

我有一个函数,该函数返回具有设置的静态值的对象。

现在我必须用API响应填充其他属性。

我的尝试:

private pretifyApiResponse(apiResponse) {
const template = this.getTemplate();

console.log(template); // {attribute1: 0, attribute2: 0, static1: 123, static2: 456}

const result: myInterface[] = [];

for (let i = 0; i < apiResponse.length; i++) {
   template.attribute1 = apiResponse[i].attribute1 || 0;
   template.attribute2 = apiResponse[i].attribute2 || 0;

   console.log(i+'. Template'); 
   console.log(template);
   result.push(template);
}

console.log('Final Result')
console.log(result);

现在是问题了,在我的循环内结果是正确的,模板也是。

但是在循环之后,数组仅包含最后一个条目,但是包含x次。

这是我上面功能的日志 Consele logs of my function

2 个答案:

答案 0 :(得分:0)

要绕过引用并创建副本,我发现了一种有疑问的方法。

JSON.parse(JSON.stringify(template));

虽然可以,但是感觉有点黑。

我试图使用Object.assign(),但是遇到了同样的问题。

一个真正解决此问题的方法。

答案 1 :(得分:-1)

您指的是同一个对象,因此,如果更改一个对象,它将影响其他对象。

private pretifyApiResponse(apiResponse) {
console.log(template); // {attribute1: 0, attribute2: 0, static1: 123, static2: 456}

const result: myInterface[] = [];

for (let i = 0; i < apiResponse.length; i++) {
    const template = {};
    const temp = Object.assign(template, template);
   temp.attribute1 = apiResponse[i].attribute1 || 0;
   temp.attribute2 = apiResponse[i].attribute2 || 0;
   console.log(temp);
   result.push(temp);
}

console.log('Final Result')
console.log(result);