2013-01-09 40 views
26

我想顯示產品瀏覽記錄,因此我將產品ID存儲在瀏覽器Cookie中。我可以限制JavaScript中數組的長度嗎?

由於歷史記錄列表限制爲5項,我將cookie值轉換爲數組,然後檢查它的長度並剪切冗餘。

下面的代碼是我試過的,但它不工作;該數組項不會被刪除。

我想問一下如何限制數組的長度,使它只能存儲5個項目?

如何在數組索引4之後切割項目?

var id = product_id; 
var browseHistory = $.cookie('history'); 
if (browseHistory != null) { 
    var old_cookie = $.cookie('history'); 
    var new_cookie = ''; 

    if (old_cookie.indexOf(',') != -1) { 
    var arr = old_cookie.split(','); 
    if (arr.length >= 5) { 
     arr.splice(4, 1) 
    } 
    } 

    new_cookie = id + ',' + old_cookie; 
    $.cookie('history', new_cookie, { expires: 7, path: '/' }); 
} else { 
    $.cookie('history', id, { expires: 7, path: '/' }); 
} 
+0

您的拼接看起來不錯,但你可以做'arr.splice(4 arr.length - 4)'確保。你是說拼接不起作用或餅乾?你正在將new_cookie設置爲old_cookie,它仍然包含5件以上物品...... – Rhumborl

回答

43

您沒有使用正確拼接:

arr.splice(4, 1) 

這將在索引中刪除1項4.看here

我想你想使用slice

arr.slice(0,5) 

這將返回位置0到4中的元素。

這裏假定您的所有代碼(餅乾等)都可以正常工作

1

您需要在從中刪除項目後實際使用縮短的數組。你忽略了縮短的數組。

將cookie轉換爲數組。你減少了數組的長度,然後你永遠不會使用這個縮短的數組。相反,你只需使用舊的cookie(未加管理的那個)。

您應該將縮短的數組轉換回爲.join(",")的字符串,然後將其用於新的Cookie,而不是使用old_cookie(未縮短)。

您可能也沒有正確使用.splice(),但我不確切知道您的目的是爲了縮短陣列。你可以閱讀關於.splice()here的確切功能。

5

fastest和簡單的方法是通過.length屬性設置爲所希望的長度:

arr.length = 4; 

這也是重置/空陣列的期望的方式:

arr.length = 0; 

警告:設置此屬性也可以使數組長度比它長:如果其長度爲2,則運行arr.length = 4會將兩個undefined項目添加到它。也許添加一個條件:

if (arr.length > 4) arr.length = 4; 
+0

對此有更多警告,我認爲應該避免使用這種方法。例如,嘗試使用像這樣創建的未定義項目來映射數組。類似於'arr.map(a => 1)'未定義的項目將保持未定義狀態。 – Nate

+0

不知道如何適用;這是爲了將數組剪裁到更短的尺寸,而不是通過生成更多的[空槽]來設置/增加其大小(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/數組#參數)。 –

+0

「這是將數組裁剪爲更短的尺寸。」你的警告說的是相反的。這會擴大可能影響未來操作的數組,如在數組上映射以顯示li元素。 – Nate

相關問題