製品の閲覧履歴を表示したいので、ブラウザCookieに製品IDを保存しています。
履歴のリストは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: '/' });
}
arr.length = Math.min(arr.length, 5)
最速 で最も簡単な方法は、.length
プロパティを目的の長さに設定することです。
arr.length = 4;
これは、配列をリセット/空にする望ましい方法でもあります。
arr.length = 0;
警告:このプロパティを設定すると、配列をより長くすることもできます:長さが2の場合、arr.length = 4
を実行すると、2つのundefined
個のアイテム。おそらく条件を追加します:
if (arr.length > 4) arr.length = 4;
代わりに:
arr.length = Math.min(arr.length, 4);
var arrLength = arr.length;
if(arrLength > maxNumber){
arr.splice( 0, arrLength - maxNumber);
}
このsoultionは、p5jsのような動的な環境でうまく機能します。これを描画呼び出し内に配置すると、配列の長さが動的にクランプされます。
の問題:
arr.slice(0,5)
...それは、描画フレームごとに配列から一定数のアイテムを取り出すだけであり、ユーザーが複数のアイテムを追加できる場合、配列サイズを一定に保つことができないことです。
の問題:
if (arr.length > 4) arr.length = 4;
...配列の最後から項目を取得するため、Push()で最後に追加する場合でも配列を循環しません。
アイテムを削除した後、実際には短縮された配列を使用する必要があります。短縮された配列を無視しています。
Cookieを配列に変換します。配列の長さを短くしてから、その短縮配列を使用しないでください。代わりに、古いCookie(短縮されていないCookie)を使用します。
短縮配列を.join(",")
を使用して文字列に変換し直し、短縮されていない_old_cookie
_を使用する代わりに新しいCookieに使用する必要があります。
また、.splice()
を正しく使用していない可能性もありますが、配列を短縮する目的が正確にはわかりません。 .splice()
here の正確な関数について読むことができます。