gpt4 book ai didi

javascript - 将对象递归插入数组

转载 作者:行者123 更新时间:2023-12-03 03:21:37 26 4
gpt4 key购买 nike

我有一个模板对象,我正在递归地修改它并需要将其插入数组,如下所示

var base = {
a: 600,
b: 1.15,
c: 0,
d: 200,
e: 3,
f: 3,
g: 1,
h: 1,
}
var array2 = new Array();
for(var i=1;i<=3;i++){
base.a = base.a*12
base.b = base.b-0.01
base.d = base.d*4
base.e = Math.ceil(base.e * 1.5)
base.f = base.e
array2.push(base)
}

预期输出为

[ { a: 7200, b: 1.13, c: 0, d: 800, e: 5, f: 5, g: 1, h: 1 },
{ a: 86400, b: 1.12, c: 0, d: 3200, e: 8, f: 8, g: 1, h: 1 } ]

实际是

[ { a: 86400, b: 1.11, c: 0, d: 3200, e: 8, f: 8, g: 1, h: 1 },
{ a: 86400, b: 1.11, c: 0, d: 3200, e: 8, f: 8, g: 1, h: 1 } ]

我发现当我操作该对象时,每次将对象放入数组中时,它都会递归地更改值。

所以问题是,如何在递归更新基本模板时不追溯更改所有值的方式将新对象放入此数组中。

(在预期输出 [1].b 中编辑了一个错误 0.01 的值)

最佳答案

您正在改变原始对象的值。您必须跟踪前一个对象,根据该对象计算值并将其插入数组。

var base = {
a: 600,
b: 1.15,
c: 0,
d: 200,
e: 3,
f: 3,
g: 1,
h: 1,
}
var array2 = [];
// store the reference of the original object
var prev = base;

for (var i = 1; i <= 3; i++) {
var obj = {};
// populate the data for the new object
// based on the previous object in array
obj.a = prev.a * 12;
obj.b = prev.b - 0.01;
obj.c = prev.c;
obj.d = prev.d * 4;
obj.e = Math.ceil(prev.e * 1.5);
obj.f = prev.e;
obj.g = prev.g;
obj.h = prev.h;

array2.push(obj);

// save the reference of the current object state
// to be used in the next iteration
prev = obj;
}

console.log(array2);

关于javascript - 将对象递归插入数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46554489/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com