84

商品の閲覧履歴を表示したいので、ブラウザの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: '/' });
}
4

6 に答える 6

152

スプライスを正しく使用していません:

arr.splice(4, 1)

これにより、インデックス4の1つのアイテムが削除されます。ここを参照してください

私はあなたがスライスを使いたいと思います:

arr.slice(0,5)

これにより、位置0から4の要素が返されます。

これは、残りのすべてのコード(Cookieなど)が正しく機能することを前提としています

于 2013-01-09T13:47:15.400 に答える
46

最も速くて簡単な方法は、.lengthプロパティを目的の長さに設定することです。

arr.length = 4;

これは、アレイをリセット/空にするための望ましい方法でもあります。

arr.length = 0;

警告:このプロパティを設定すると、配列が実際より長くなる可能性があります。長さが2の場合、実行すると2つの項目arr.length = 4が追加されます。undefinedおそらく条件を追加します:

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

または:

arr.length = Math.min(arr.length, 4);
于 2016-03-04T07:39:47.200 に答える
26
arr.length = Math.min(arr.length, 5)
于 2017-02-08T13:45:54.120 に答える
8
var  arrLength = arr.length;
if(arrLength > maxNumber){
    arr.splice( 0, arrLength - maxNumber);
}

このソリューションは、のような動的な環境でより適切に機能しますp5js。これを描画呼び出しの中に入れて、配列の長さを動的にクランプします。

の問題

arr.slice(0,5)

つまり、描画フレームごとに配列から固定数のアイテムしか取得されないため、ユーザーが複数のアイテムを追加できる場合は、配列のサイズを一定に保つことができません。

の問題

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

配列の最後からアイテムを削除するため、最後に。を追加している場合は、配列を循環しませんpush()

于 2018-04-10T19:08:31.357 に答える
3

私はあなたがただすることができると思います:

let array = [];
array.length = 2;
Object.defineProperty(array, 'length', {writable:false});


array[0] = 1 // [1, undefined]

array[1] = 2 // [1, 2]

array[2] = 3 // [1, 2] -> doesn't add anything and fails silently

array.push("something"); //but this throws an Uncaught TypeError
于 2019-12-20T19:19:37.573 に答える
1

アイテムを削除した後、実際に短縮された配列を使用する必要があります。短縮された配列を無視しています。

Cookieを配列に変換します。配列の長さを短くすると、その短縮された配列を使用することはありません。代わりに、古いCookie(短縮されていないCookie)を使用するだけです。

短縮された配列をで文字列に変換し直してから、短縮されていないもの.join(",")を使用する代わりに、それを新しいCookieに使用する必要old_cookieがあります。

また、正しく使用していない可能性があり.splice()ますが、配列を短縮する目的が正確にはわかりません。.splice() あなたはここの正確な機能について読むことができます。

于 2013-01-09T13:47:24.690 に答える