JavaScript 创建新对象

标签 javascript object

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

代码:

这是创建新对象的代码:

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)。但是,如果我同时进行这些拍卖,价格肯定会低于价格。

我刚刚同时进行了两次拍卖,第一辆车的价格为 18000 美元,但拍卖最终的出价为 6370 美元。第二辆车的估价为 57,000 美元,拍卖结束于 46428 美元

所有出价均由人工智能完成,并且它们被编程为始终在高于车辆值(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 美元(预期行为)

最佳答案

您的update代码中有一个错误:如果您删除一个条目(您的splice调用),您不希望增加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/

相关文章:

javascript - ReactJS:从列表中删除没有ID的项目?

javascript - OpenId Connect、查询 Microsoft Graph

javascript - 查找具有最大值的父对象

javascript - Google 跟踪代码管理器 (GTM) 错误。预期的主要表达

java - 确保同一个对象不会从 Java 中的 XML API 加载两次

Javascript:如何将动态键插入 map /对象?

javascript - 具有相同脚本的多个幻灯片

javascript - 使表单 submit() 表现得像 location.replace()

javascript - jquery.find 问题

JavaScript 对象声明