莫愁前路無知己,天下誰人不識君--- 唐.高適《別董大二首》
本文的數組排序,數組去重,判斷出現的次數,都不使用數組的方法。
具體的流程思想在代碼注釋中
一、冒泡排序
//冒泡排序: var arr = [1,2,3,5,4]; var j,temp,flag; var count = 0;//用於記錄比較的輪數 //外層循環控制比較的趟數 //使用假設成立法:(使用變量標記的方式) //1 找到程序中不確定的操作,設置假設條件 //2 對假設條件進行驗證(設置一個可以使假設失敗的條件) //3 對假設條件的最終值進行檢測,設置操作 for(var i = 0;i < arr.length - 1; i++){ count++; flag = true;//假設本輪執行排序后可以跳出 for(j = 0; j < arr.length - 1 - i; j++){ if(arr[j] > arr[j+1]){ temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; //只要進入到if中,說明排序可能沒有完畢,設置假設條件為false //阻止跳出 flag = false; } } if(flag){ break; } } console.log(arr,count);
一、數組去重
//數組去重: var arr = [5,1,2,1,2,2,1,2,1,2,3,4,3,4,5,3,4,5,4,3,2,1]; //希望得到的結果為[1,2,3,4,5] //1 創建一個結果數組 var resultArr = [arr[0]]; var flag; //2 遍歷數組 for(var i = 1; i < arr.length; i++){ // 正確的實現方式 flag = true;//假設當前arr[i]可以放入到resultArr中 for(j = 0; j < resultArr.length; j++){ //設置可以讓假設失敗的條件:如果偶遇任何一個元素相等,即說明不能放入 if(arr[i] === resultArr[j]){ flag = false; } } //根據flag的值設置最終操作 if(flag){ resultArr.push(arr[i]); } } console.log(resultArr);
簡單介紹一下Set:Set
是ES6中新的對象,數組去重特別方便。只需要兩行代碼
//先定義一個重復的數組
var arr = [1,1,2,2,2,3,3,4,4] var set = new Set(arr) // {1,2,3,4} var newArr = Array.from(set) // 再將set轉變成array console.log(newArr) // [1,2,3,4]
實現的原理:Set
於Array
的區別在於:Array
中允許出現重復的元素,例如[1,2,2,3]
;而Set
中的所有元素都是唯一的,只能是{1,2,3}
。利用這一特性,我們就可以迅速地去掉數組中重復的元素。
三、出現的次數
補充:第一種方法略麻煩,數組去重后,然后比較出現的次數,略麻煩已刪除,推薦第二種
第二種方法 (推薦第二種方法)
// 先定義一個數組
var arr=["a","a","a","a","b","b","b","c","c","c"]
//再定義一個對象,用來保存相同的數據 var obj={} for(var i=0;i<arr.length;i++){ //將循環數組中的每個數賦值給item 作為對象中的鍵 var item=arr[i] if(obj[item]){//這句的意思是對象中以item作為鍵存在嗎,如果存在的話,就讓這鍵的值再加1 obj[item]=obj[item]+1 }else{ //如果不存在等於1,多次循環就可得到結果 obj[item]=1 } } console.log(obj)//結果:{a: 4, b: 3, c: 3}