使用js做了一個貪吃蛇游戲,但是自己很多的地方都不成熟:
1,沒有用到原型,構造函數,繼承之類的東西,這些地方要特別的注意,以后要注意經常看看別人的代碼,學會一些思想
2,表現為邏輯混亂,不知道怎樣用更簡單的方法,以后這方面需要多加練習
在貪吃蛇游戲中收獲的部分:
實現數組中棧的方法,幾個API
棧方法(后進先出)
1,push()方法接收任意數量的參數,將他們逐個添加到數組末尾,並且返回修改后數組的長度,
2,pop()方法從數組末尾移除最后一項,減少數組的length值,然后返回移除的項
隊列方法(先進先出)
1,shift()方法用於移除數組中的第一個項並返回該值,結合push()方法可以實現隊列的方法
1,與shift()相反的還有一個unshift()方法,這個方法可以在數組前端添加任意一個項並且返回新數組的長度
同時:unshift()方法和pop()方法可以實現從反向位置模擬隊列,就是從數組前端添加項,從數組末端移除項
實現數組查重的幾種方法:
方法一:
使用indexOf()判斷:
代碼如下:
window.onload=function(){ var array=[1,2,3,4]; repeat(array); function repeat(arr){ var arrStr=JSON.stringify(arr); for(var i=0;i<arr.length;i++){ if(arrStr.indexOf(arr[i])!==arrStr.lastIndexOf(arr[i])){ alert("數組重復") } } } }
應用字符串中的indexOf和lastIndexOf()方法來求:原理是如果在數組中存在兩個相同的元素,使用indexOf和lastIndexOf()方法得到的數組索引是不相同的,但是因為這兩個方法存在於字符串中,因此在使用前使用JSON將數組元素轉化為字符串是必須的,使用API(JSON.stringfy(arr))
在使用這個方法的時候,最好不要將如果檢測到有重復元素后發生的事件放到for循環內,因為這樣會重復好多次,可以定義一個bJuge來判斷,如果有重復的元素,將bJuge設為true
2,使用sort()方法:
var array=[1,2,3,2]; //repeat(array); var nary=array.sort(); for(var i=0;i<array.length;i++){ if (nary[i]==nary[i+1]){ alert("數組重復內容:"+nary[i]); } }
代碼如上:
缺點:當數組中的元素為字符串的時候就不適用了,有局限性
3,
var array=["天津","山東","濟南","濟南"]; var s = array.join(",")+","; for(var i=0;i<array.length;i++) { if(s.replace(array[i]+",","").indexOf(array[i]+",")>-1) { alert("數組中有重復元素:" + array[i]); break; } }
方法:
使用的是兩個API join()和replace()的方法:
arrayObject.join(separator)
上面這行代碼的意思是:
以separator 分割開 arrayObject 將每個元素分割成字符串,然后字符串間用separator分開
replace()方法:用於替換數組元素:
上面的代碼:
if(s.repplace(array[a]+","," ").indexOf(array[i]+",")>-1)
使用空格來替換掉array[a]+","元素,然后再繼續查找這個元素,如果發現替換掉之后這個元素依然存在,這說明數組中這個元素是存在的
4,最后一種是一種非常奇特的方法,作為了解即可:
var array=["天津","山東","濟南","濟南"]; isRepeat(array); function isRepeat(arr){ var hash = {}; for(var i in arr) { if(hash[arr[i]]){
alert(arr[i]);//"濟南
}
hash[arr[i]] = true; } }
這種方法很奇怪哎:
我們看:
var hash={};定義了一個對象
hash[arr[i]]給hash對象賦予了一個屬性,並且使用for循環給數組中的每一個元素都設置為hash對象的屬性,並且將這些屬性都設為true,在for循環中,使用了一個if判斷語句,
如果存在兩個重復元素的話,因為已經將第一個重復元素設為了true,那么如果檢測到后面沒被賦值的數組元素為true的話,這說明這個元素之前已經被賦予過值,從而我們可以得知在數組中存在重復元素
以上:
完
如果有別的感想我再更新