陣列的去重和排序
通過new Set() 生成一個類陣列,並沒有重複的值
let [...result] = new Set(arr) // [ 1, 4, 12, 5, 125, 4512 ] 複製程式碼
或者可以使用Array.from(), 可以把類陣列轉換成陣列結合使用
let result = Array.from(new Set(arr)) // [ 1, 4, 12, 5, 125, 4512 ] 複製程式碼
Array.indexOf()
Array.indexOf() 返回陣列中某個指定元素第一次出現的位置,沒有找到指定元素則返回-1
var result = arr.filter((item,index) => { return arr.indexOf(item) === index }) 複製程式碼
-
filter函式會返回當前迴圈的這一項的判斷結果,為true則保留這一項, 反之捨棄這一項,在這裡第一次出現的4在索引1的位置,並記錄下來 ; 最後兩個4的索引 不等於第一次記錄4的索引位置,所以返回 false 並不會被保留
-
另一種思路或者利用indexOf沒找到指定元素返回-1這一特性,把這心不重複的元素push到新陣列中
let newArr = [] let result =arr.forEach(item => { if(newArr.indexOf(item) === -1) { newArr.push(item) } }) console.log(newArr) // [ 1, 4, 12, 5, 125, 4512 ] 複製程式碼
- 類似indexOf 方法使用js實現去重,定義一個空陣列,迴圈要去重的陣列,如果新陣列中有當前這一項break,如果沒有就push進去
let newArr = [] const isRepeat; for(let i=0; i<arr.length;i++) { isRepeat = false for( let j=0; j< newArr.length;j++) { if(arr[i] === newArr[j]) { isRepeat = true break } } if(!isRepeat) { newArr.push(arr[i]) } } console.log(newArr) [ 1, 4, 12, 5, 125, 4512 ] 複製程式碼
Map建構函式
let tmp = new Map() let result = arr.filter(item => { return !tmp.has(item) && tmp.set(item, 1) }) console.log(result) // [ 1, 4, 12, 5, 125, 4512 ] 複製程式碼
氣泡排序
var a = [45,67,23,88,21,6,99]; for(let i=0; i < a.length-1; i++) { for(let j=0; j< a.length-1-i; j++) { if(a[j] > a[j+1]) { var temp = a[j] a[j] = a[j + 1] a[j+1] = temp } } } console.log(a) // [ 6, 21, 23, 45, 67, 88, 99 ] 複製程式碼
相鄰兩個比較,i項大於i+1項互換位置,迴圈a.length -1 輪把其中最大一項放到對尾
選擇排序
var a = [45,67,23,88,21,6,99]; let min; // 最小值 let pos; // 最小值下標 for(let i=0;i<a.length;i++) { min = a[i] pos = i for(let j=i+1;j<a.length;j++) { if(a[j] < min) { min = a[j] pos = j } } var temp = a[i] a[i] = min a[pos] = temp } console.log(a) // [ 6, 21, 23, 45, 67, 88, 99 ] 複製程式碼
假定最小值min 和 最小值的 索引預設為第一項,
第二個迴圈遍歷陣列中除i
項外, 發現有比min
的元素小,立即重新對min
賦值,第二層迴圈結束。
在第一層迴圈中,把當前這一項備份 ,為了調換位置使用var temp = a[i]
當前這一項和min
調換位置a[i] = min
a[pos] = temp
插入排序
var a=[45,67,23,88,21,6,99]; for(let i=0;i<a.length;i++) { for(let j=i;j>0 && a[j] < a[j-1];j--) { var temp = a[j] a[j] = a[j-1] a[j-1] = temp } } console.log(a) // [ 6, 21, 23, 45, 67, 88, 99 ] 複製程式碼
當前這一項元素和它的前一項進行比較
如果當前的值小於他的前一項那麼調換位置,j--
會使當前位置向前走一位,直到找到比他小的交換位置後,如果j < 0
後跳出迴圈。最小值會移到陣列第一項。
排序演算法——插入排序blog.csdn.net/xiaoping091…