請問,循環之後的if判斷力,o[v]=1,是什麼意思?謝謝。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文檔</title>
<script type="text/javascript">
var arr=[1 ,1 ,2, 3, 3, 2, 1];
Array.prototype.unique=function(){ //unique應該是自定義的,這個是往數組原型上添加一個函數(屬性),以後各個你定義的數組都可以直接使用這個函數(屬性)
var ret=[];
var o={};
var len=this.length;
for(var i=0; i<len; i++){
var v=this[i];
if(!o[v]){
o[v]=1;
ret.push(v);
}
}
return ret;
}
alert(arr.unique());
</script>
</head>
<body>
</body>
</html>
要明白這幾個數組的作用就知道為什麼設置o[v]=1 了。
ret這個數組很明白,是存放結果用的。
了解o這個數組,需要關注for循環中,v這個值是獲取到輸入數組的值(i是輸入數組的索引),所以v的取值依次是“1 ,1 ,2, 3, 3, 2, 1”,在if判斷中,如果某個數被添加到ret中了,則在o這兒數組中做個標識,表示該數下次不用記入ret數組,也就是重復數組。
比如:取第一個1的時候,o數組為空,所以進入if條件,if執行完成後,o中存儲的是1==>1,下次再取到v為1時,o[1]=1,所以不滿足if條件,所以就不會再向ret數組中壓入數據值了。也就是說o這個數組是來記錄哪些數據已經添加到結果,用來判重使用的。