2013-01-09 16 views
26

Chcę wyświetlić historię przeglądania produktu, więc zapisuję identyfikatory produktu w pliku cookie przeglądarki.Czy mogę ograniczyć długość tablicy w JavaScript?

Ponieważ lista historii jest ograniczona do 5 pozycji, konwertuję wartość cookie na tablicę, a następnie sprawdzam jej długość i usuwam redundantne.

Poniższy kod jest tym, co próbowałem, ale nie działa; element tablicy nie został usunięty.

Chciałbym zapytać, jak ograniczyć długość tablicy, aby mogła przechowywać tylko 5 elementów?

Lub

Jak mogę wyciąć elementy po indeksie tablicy 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

Twój splot wygląda dobrze, z wyjątkiem można zrobić 'arr.splice (4, arr.Length - 4)', aby upewnić się. Mówisz, że splice nie działa lub ciasteczko? ustawiasz new_cookie na old_cookie, które wciąż zawiera 5+ pozycji ... – Rhumborl

Odpowiedz

43

Nie jesteś prawidłowo za pomocą spawów

arr.splice(4, 1) 

to usunie 1 element o indeksie 4. zobaczyć here

myślę chcesz użyć slice:

arr.slice(0,5) 

spowoduje to zwrócenie elementów w pozycjach od 0 do 4.

Zakłada całą resztę kodu (ciasteczka itp) działa poprawnie

1

Trzeba faktycznie używać skróconej tablicę po usunięciu z niego przedmiotów. Ignorujesz skróconą tablicę.

Konwertujesz plik cookie na tablicę. Zmniejsz długość tablicy, a następnie nigdy nie używaj tej skróconej tablicy. Zamiast tego wystarczy użyć starego cookie (nieskróconego).

Powinieneś przekonwertować skróconą tablicę z powrotem na ciąg znaków za pomocą .join(","), a następnie użyć go do nowego pliku cookie zamiast używać numeru old_cookie, który nie jest skracany.

Możesz również nie używać poprawnie .splice(), ale nie wiem dokładnie, jaki jest twój cel skrócenia tablicy. Możesz przeczytać o dokładnej funkcji .splice()here.

5

fastest i Najprostszym sposobem jest ustawienie właściwości .length do żądanej długości:

arr.length = 4; 

ten jest również odpowiedni sposób, aby wyzerować/pustego tablic:

arr.length = 0; 

Zastrzeżenie: ustawienie tej właściwości może również spowodować wydłużenie tablicy: Jeśli ma długość 2, działa arr.length = 4 doda do niego dwa elementy: undefined.Może dodać warunek:

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

Jest więcej zastrzeżeń do tego i myślę, że tej metody należy unikać. Na przykład spróbuj odwzorować tablicę z niezdefiniowanymi elementami utworzonymi w ten sposób. Coś jak 'arr.map (a => 1)' Niezdefiniowane elementy pozostaną niezdefiniowane. – Nate

+0

Nie wiesz, jak to dotyczy; Oznacza to przycięcie tablicy do krótszego rozmiaru, a nie ustawienie/zwiększenie jej rozmiaru przez wygenerowanie większej ilości [pustych gniazd] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ Array # Parameters). –

+0

"To przycina tablicę do krótszego rozmiaru." Twoje zastrzeżenie przemawia na odwrót. Rozszerza to tablicę, która może wpływać na przyszłe manipulacje, takie jak mapowanie w tablicy w celu wyświetlenia elementów li. – Nate

Powiązane problemy