我有一个非常复杂的对象,我必须部分填充来自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次。
答案 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);