猿问

JS的问题,,求解

var arr = [1, 2, 2, 3, 4, 5, 6, 6];

function getArray(a) {
 var hash = {},
     len = a.length,
     result = [];

 for (var i = 0; i < len; i++){
     if (!hash[a[i]]){
         hash[a[i]] = true;
         result.push(a[i]);
     } 
 }
 return result;
}

console.log(getArray(arr));

这是个数组去重的方法,,里面的if(!hash[a[i]])这个叹号hash是什么意思啊,,难道是hash对象内没有a[i]这个值吗,,那接下来hash[a[i]]=true是什么意思,,搞不懂。。里面的值会等于true

whosyourdaddy1994
浏览 1538回答 2
2回答

李晓健

开始  i = 0;  a[i] = 1   hash = {}  result = [], 这时hash[a[i]] 也就是 hash[1]  是不存在的。就会走if里面的代码hash={1: true}   result = [1],         i =1 时; a[i] = 2     hash = {1:true}  result = [1] ,这时hash[a[i]] 也就是 hash[2]  是不存在的。就会走if里面的代码hash={1:true,2:true}  result = [1,2]        i=2时; a[i] = 2    hash = {1:true,2:true}  result = [1,2] ; 这时hash[a[i]] 也就是 hash[2]=true 。就不会走if里的代码 ,这里原数组里的第二个2就忽略了,也就是第2个2是不会进到result       i = 3时; a[i] = 3   hash = {1:true,2:true}  result = [1,2] ; 这时hash[a[i]] 也就是 hash[3]  是不存在的 。就会走if里面的代码hash={1:true,2:true,3:true}  result = [1,2,3]  这样一直下去  最后得到的 result  就是去掉重复的新数组这样说不知道你能不能看懂。

品茗见南山

多写2个debugger;调试看看就知道了
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答