存储“最后10个”数据集的数据结构?

时间:2011-09-27 01:04:54

标签: javascript

我目前正在使用对象Literal来存储要发送给客户端的临时信息,它就像是最后10组数据的历史容器。

所以我所遇到的问题是找出最有效的方法来拼接对象以及在开始时推送一个对象,所以基本上我有一个对象,这个对象里面有0个数据。 / p>

然后我插入值,但我需要做的是当对象达到10个键时,我需要弹出对象文字结尾的最后一个元素,向上推所有键,然后在开头插入一个值。 / p>

拿这个示例对象

var initializeData = {
    a : {},
    b : {},
    c : {},
    d : {},
    e : {},
    f : {},
    g : {},
    h : {},
    i : {},
    j : {}
}

当我插入元素时,我需要 j 删除, i 成为最后一个元素, a 成为 b'/强>

这样新元素就会变成 a

任何人都可以帮我解决这个问题,我使用的是node.js,但原生JavaScript显然很好。


在回复建议后使用数组,基本上我认为你告诉我这是最好的解决方案:

function HangoutStack(n)
{
    this._array = new Array(n);
    this.max    = n;
}

HangoutStack.prototype.push = function(hangout)
{
    if(this._array.unshift(hangout) > this.max)
    {
        this._array.pop();
    }
}

HangoutStack.prototype.getAllItems = function()
{
    return this._array;
}

3 个答案:

答案 0 :(得分:4)

听起来使用数组要容易得多。然后,您可以使用unshift从头开始插入,pop从末尾删除。

修改:示例:

var items = []

function addItem(item) {
  items.unshift(item)
  if (items.length > 10) {
    items.pop()
  }
}

或者,您可以使用push / shift代替unshift / pop。取决于您希望新项目位于数组的哪一端。

答案 1 :(得分:2)

您需要的是Circular Buffer。 看看这个implementation in javascript

答案 2 :(得分:1)

是的,使用数组。

var arr = [];

// adding an item
if (arr.unshift(item) > 10) {
    arr.pop();
}

如果您需要项目的“名称”,例如对象示例中的“a”或“b”,只需将每个项目包装在包含名称和对象的另一个对象中。

js中的对象就像字典 - 它们对项目没有固有的顺序。它只是一组东西。您可以尝试编写订单(例如您的示例中的通过z),但是当事情发生变化时您必须自己管理该订单。使用数组要容易得多。