我可以在JavaScript中限制数组的长度吗?

我想显示产品浏览历史记录,因此我将产品ID存储在浏览器cookie中。

因为历史列表限制为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.splice(4, 1) 

这将删除索引4处的1个项目。请参阅此处

我想你想用切片 :

 arr.slice(0,5) 

这将返回位置0到4的元素。

这假设您的所有其余代码(cookie等)都能正常工作

 arr.length = Math.min(arr.length, 5) 

最快最简单的方法是将.length属性设置为所需的长度:

 arr.length = 4; 

这也是重置/清空数组的理想方法:

 arr.length = 0; 

警告:设置此属性也可以使数组长于:如果长度为2,则运行arr.length = 4将向其添加两个undefined项。 也许添加一个条件:

 if (arr.length > 4) arr.length = 4; 
 var arrLength = arr.length; if(arrLength > maxNumber){ arr.splice( 0, arrLength - maxNumber); } 

这种灵魂在像p5js这样的动态环境中工作得更好。 我把它放在draw调用中,它动态地钳制了数组的长度。

问题:

 arr.slice(0,5) 

…每个绘制框架只需要固定数量的项目,如果用户可以添加多个项目,则无法使数组大小保持不变。

问题:

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

…就是它将数据从数组的末尾取出,因此如果你还使用push()添加到数组,则不会循环遍历数组。

从中删除项目后,您需要实际使用缩短的数组。 你忽略了缩短的数组。

您将cookie转换为数组。 您减少了数组的长度,然后您永远不会使用缩短的数组。 相反,你只需使用旧的cookie(未经训练的cookie)。

您应该将缩短的数组转换回带有.join(",")的字符串,然后将其用于新cookie而不是使用未缩短的old_cookie

您可能也没有正确使用.splice() ,但我.splice()地知道您缩短数组的目标是什么。 你可以在这里阅读.splice()的确切function。