这个我不懂,男朋友给我讲了一遍,我还是不太明白,于是自己带入实例一个一个理了一遍,写上了很详细的注释,如果有人能看到,并且和我一样不太理解,希望看到这个就都能懂哈,哎学习中的菜鸟伤不起~
var countArr = [1, 2, 1]; function unique(arr) { var resultArr = [], hash = {}; //定义返回的数组,和哈希表 for (var i = 0, elem; (elem = arr[i]) != null; i++) { //for循环第一句话:定义i=0,和elem两个变量 //for循环第二句话:把arr[i]的值赋给elem,判断elem的值是否为空 //①当i=0,第一次循环,elem=arr[0]=1,所以不为null,进入循环内部 //②当i=1,第二次循环,elem=arr[1]=2,所以不为null,进入循环内部 //③当i=2,第三次循环,elem=arr[2]=1,所以不为null,进入循环内部 if (!hash[elem]) { //①这时elem=1,if(!hash[1])由于这时hash={},所以hash[1]没有值为false,!hash[1]就为true,执行if内部语句 //②这时elem=2,if(!hash[2])由于这时hash={1:true},所以hash[2]没有值为false,!hash[2]就为true,执行if内部语句 //③这时elem=1,if(!hash[1])由于这时hash={1:true,2:true},所以hash[1]有值为true,!hash[1]就为false,不执行if内部语句 resultArr.push(elem); //①resultArr=[1] //②resultArr=[1,2] //不执行第三次 hash[elem] = true; //①hash={1:true} //②hash={1:true,2:true} //不执行第三次 }; }; return resultArr; } document.write(unique(countArr));