我可以在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。