使用jQuery $.unique检测数组重复值失效问题求助
问题:jQuery的$.unique方法为何对部分数组去重无效?
你使用$.unique()检测数组重复时,发现$arrTest1能正常触发重复提示,但$arrTest2却提示无重复,核心问题是你用错了方法,以下是具体分析和解决办法:
你的代码示例
$arrTest1 = ['46819', '46819', '46819']; $arrTest2 = ['46819', '46802', '46819']; let len1 = arrTest1.length; let len2 = $.unique(arrTest1).length; if (len1 > len2) { alert('Found duplicate'); } else { alert('Did not find duplicate'); } let len3 = arrTest2.length; let len4 = $.unique(arrTest2).length; if (len3 > len4) { alert('Found duplicate'); } else { alert('Did not find duplicate'); }
原因分析
$.unique()是jQuery专为DOM元素数组设计的去重工具,它通过比较DOM元素的内存引用而非值来判断是否重复,根本不适合处理普通字符串/数值数组。$arrTest1能“正常”检测是巧合:数组内的相同字符串字面量可能被JS引擎优化为同一个内存引用,导致$.unique()误判为重复元素,但这不是该方法的正确用法。$arrTest2无效是必然:数组内的字符串值有差异,即使存在重复的'46819',$.unique()也无法识别普通值的重复,处理后数组长度和原数组一致,所以触发“无重复”提示。
正确的数组重复检测方法
放弃$.unique(),用原生JS方法实现普通数组的去重和重复检测:
方法1:使用Set(最简洁)
// 检测$arrTest2的重复 const uniqueArr = [...new Set($arrTest2)]; if ($arrTest2.length > uniqueArr.length) { alert('Found duplicate'); } else { alert('Did not find duplicate'); }
方法2:使用filter+indexOf
const uniqueArr = $arrTest2.filter((item, index) => $arrTest2.indexOf(item) === index); if ($arrTest2.length > uniqueArr.length) { alert('Found duplicate'); } else { alert('Did not find duplicate'); }
内容的提问来源于stack exchange,提问作者user18435906
相关产品推荐
相关产品推荐

