数组元素存在性校验失效,添加ID功能异常求助
你的代码存在两个关键问题:
- 判断逻辑完全写反:当前代码是「ID已经在列表里时才执行添加操作」,和你预期的功能完全相反
- 类型不匹配:
$(this).data('id')返回的是数字类型,而从Cookie读取分割后的数组元素是字符串类型,导致indexOf判断是否存在时出错
修正后的代码如下:
$(function(){ $(".js-compare-add").click(function(){ // 把ID转为字符串,和Cookie中存储的类型统一 var item_id = String($(this).data('id')); if(Cookies.get('compare_id_list')){ var compareListStr = Cookies.get('compare_id_list'); var compareListArr = compareListStr.split(','); // 修正逻辑:只有ID不在列表里时才执行添加 if (compareListArr.indexOf(item_id) === -1) { compareListArr.push(item_id); Cookies.set('compare_id_list', compareListArr.join(','), {expires: 10}); alert('Save! ' + item_id); } else { alert('already have ' + item_id); } } else { alert('There was no list, we created it and added this position ' + item_id); Cookies.set('compare_id_list', item_id); } }); });
修改说明:
- 统一
item_id的类型为字符串,避免数字与字符串对比时indexOf判断失效 - 颠倒判断逻辑,确保只有ID未存在于列表中时才执行添加操作
- 简化数组初始化代码,因前面已确认Cookie存在,无需额外判断
内容的提问来源于stack exchange,提问作者Lememlol
相关产品推荐
相关产品推荐

