gpt4 book ai didi

JavaScript 创建新对象

转载 作者:行者123 更新时间:2023-11-29 17:00:44 25 4
gpt4 key购买 nike

目前我正在尝试同时运行拍卖的两个实例,但当我创建一个新对象时,它似乎与之前的对象完全相同。

代码:

这是创建新对象的代码:

AuctionSell._state = new auctionGen();
AuctionSell._state.init(i);
auctions.push(AuctionSell._state);

请注意,auctionGen() 是一个返回对象的函数,该对象包含围绕拍卖本身的所有变量和逻辑。

function auctionGen()
{
return {
//code
}
}

^ 这只是一个空白模板,用于显示对象的实际创建方式。

更新拍卖数组:

update : function(dt)
{
if(auctions.length > 0)
{
for(var i = 0; i < auctions.length; ++i)
{
if(!auctions[i]._expired)
{
auctions[i].update(dt);
}
else
{
auctions.splice(i, 1);
}
}
}
}

如您所见,我创建了新对象,然后将其推送到将包含我的拍卖的数组中。这发生在拍卖的 init 函数中,该函数仅在创建新拍卖时被调用。我检查了两个拍卖状态的数据,它们包含不同的待拍卖车辆,但似乎创建新车辆会停止旧车辆。

示例:

如果我单独进行一场拍卖 - 取决于汽车 - 最终出价将始终高于实际值(value)。但是,如果我同时进行这些拍卖,它肯定会低于值(value)。

我刚刚同时进行了两次拍卖,第一辆车的价格是 18000 美元,但拍卖以 6370 美元 的出价结束。第二辆车的值(value)为 57,000 美元,拍卖结束时为 46428 美元

所有的出价都是由 AI 完成的,它们被编程为总是在高于车辆值(value)的某个点停止出价。此问题仅在同时运行两个或多个拍卖时出现。

问题

是否有另一种方法可以让我创建这些对象,使它们成为真正的新对象?截至目前,它们似乎相互干扰。

编辑:

将更新调用更改为以下内容后:

update : function(dt)
{
var i;
if(auctions.length > 0)
{
i = 0;
while(i < auctions.length)
{
if(!auctions[i]._expired)
{
auctions[i].update(dt);
++i;
}
else
{
auctions.splice(i, 1);
}
}
}
}

并修复了我的 ai 数组,使其不再是全局的,似乎问题现在只发生在第二次车辆拍卖中。 57,000 美元 车辆的出价停止在 17,198 美元,而我的 12,000 美元 车辆停止在 23,947 美元(预期行为)

最佳答案

您的更新代码中有一个错误:如果您删除了一个条目(您的拼接调用),您不想增加i,它会让你跳过条目——假设你有条目 012;在处理 1 时,将其删除;现在,以前位于 2 的条目位于 1,因此如果您增加 i,您将跳过它。

相反,如果您不删除条目,则仅增加 i:

update : function(dt)
{
var i;
if(auctions.length > 0) // *** There's no reason to do this
{
i = 0; // *** Change on this line
while (i < auctions.length) // *** Change on this line
{
if(!auctions[i]._expired)
{
auctions[i].update(dt);
++i; // *** Note we increment `i`
}
else
{
auctions.splice(i, 1); // *** Removing, so don't increment `i`
}
}
}
}

关于JavaScript 创建新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28412175/

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