1

我正在尝试获取一个数组来保存 10 个最新值,但到目前为止它无法正常工作。

var messages = new Array(10);

function addmessage(message) {
    messages.unshift(message);
    messages.length = 10;
}

但是当我尝试显示数组时,我无法让它按顺序显示消息......

我用

$.each(messages, function(key, value) {
    if(value != null) {
        $("#messages").append(value + "<br>");
    }
});
4

4 回答 4

6
var messages = []; //use an array literal instead.

function addmessage(message) {  

    //unshift loads the new value into the beginning
    messages.unshift(message);

    //if you want to place it in the end, you can use push()
    //messages.push(message);

    //if you really want it to remain 10,  pop off the last
    if(messages.length > 10){
        messages.pop();
        //and if push()
        //messages.shift()
    }              
}

//loop through and append, "latest" first
$.each(messages, function(key, value) {

    if(value != null) {
        $("#messages").append(value + "<br>");
    }

});

如果您随后使用最新的实时/动态加载消息,您可以使用.prepend()

于 2012-04-18T06:33:46.370 回答
1

以最简单的形式,您可以拥有:

messages.push(message);
messages.length > 9 && messages.shift();

这将在末尾添加新消息,并在长度达到 10 后从前面删除一条。

于 2012-04-18T07:11:49.480 回答
0

你期待什么样的订单?您将条目放在数组的开头,因此顺序是相反的。

例如:

addmessage('test'); addmessage('test2'); addmessage('test4');
addmessage('test6'); addmessage('test23'); addmessage('test34');
addmessage('test32'); addmessage('test3'); addmessage('test45');
addmessage('test7'); addmessage('test8');

结果是这样的数组:

["test8", "test7", "test45", "test3", "test32", "test34", "test23", "test6", "test4", "test2"]

如果您想以另一种方式使用它,则函数应如下所示:

function addmessage(message){
  messages.push(message);
  messages.shift();
}

结果是相反的:

["test2", "test4", "test6", "test23", "test34", "test32", "test3", "test45", "test7", "test8"]
于 2012-04-18T06:42:21.470 回答
0

试试这个解决方案,也许你想要你的项目以相反的顺序?

于 2012-04-18T06:38:34.590 回答