如何判断localStorage中的值是否在数组中?及代码排查求助
问题分析与解决方案
你的代码里有两个关键问题导致数组检查没生效,咱们一步步理清楚:
1. $.inArray的返回值判断逻辑错误
$.inArray()的返回规则是:
- 找到匹配元素时,返回它在数组中的索引值(从0开始计数)
- 未找到时返回
-1
你当前直接用if($.inArray(curPostId, lines))做判断,会出现逻辑漏洞:当元素是数组第一个元素(索引为0)时,0会被JavaScript视为false,导致条件不执行;只有元素在索引1及以后时才会触发条件,这显然不符合你“只要元素存在就执行”的需求。
正确的判断逻辑应该是检查返回值不等于-1,以此确认元素存在于数组中。
2. 数据类型不匹配
$(".my_post_id").attr("data-id")返回的是字符串类型,而你从localStorage通过JSON.parse得到的lines数组里的元素是数字类型。$.inArray()采用严格匹配(和===逻辑一致),所以字符串"248"和数字248会被判定为不相等,自然找不到匹配项。
修正后的代码
// 将获取到的data-id转换为数字类型,保证和数组元素类型一致 var curPostId = Number($(".my_post_id").attr("data-id")); // 正确判断元素是否存在于数组中 if ($.inArray(curPostId, lines) !== -1) { $('#'+localStorage.getItem('saveButton')).attr('disabled', true); }
额外验证建议
你可以加两行日志来确认类型和返回值是否符合预期:
console.log(typeof curPostId); // 应输出"number" console.log($.inArray(curPostId, lines)); // 应输出1(因为248是数组的第二个元素)
这样就能确保类型匹配,且条件判断逻辑正确啦。
内容的提问来源于stack exchange,提问作者rob.m
相关产品推荐
相关产品推荐

