2012-04-18 30 views
1

我想獲得一個數組來保存10個最新的值,到目前爲止它不能得到它的工作。使數組保持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>"); 
    } 
}); 
+0

訪問缺少的成員將返回'undefined'的值,所以你的測試是在類型轉換上進行depdending。考慮'if(key in this)'。 – RobG 2012-04-18 06:51:29

回答

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>"); 
    } 

}); 

數組,如果你然後實時/動態加載消息最新的第一個,you can use .prepend()

+1

是的,還'如果(messages.length> 10)messages.pop()' – drinchev 2012-04-18 06:35:05

+0

好提示,從來沒有想過從0開始:D – Joseph 2012-04-18 06:36:15

+0

最新應該是最後這樣.prepend()是不需要的。 – Qzen 2012-04-18 06:46:58

0

你期望什麼樣的訂單?你把條目放在數組的開頭,所以順序是反轉的。

例如:

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

結果數組是這樣的:

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

["test8", "test7", "test45", "test3", "test32", "test34", "test23", "test6", "test4", "test2"] 
,如果你想擁有它周圍的其他方法,你的功能應該是這樣的

結果反過來:

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

好吧,他們根本沒有進來。 – Qzen 2012-04-18 06:45:09

1

在它最簡單的形式,你可以有:

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

那會在結尾處添加新的信息,然後從前面卸下一個曾經長度到達10