js的 算法
參考:https://blog.csdn.net/weixin_41082623/article/details/81988836
一、排序算法 : 十大經典排序算法(動圖演示)
1、冒泡排序:
1)比較相鄰的兩個元素,如果前一個比后一個大,則交換位置。
2)第一輪的時候最后一個元素是最大的一個。
3)按照步驟一的方法進行相鄰兩個元素的比較,由於最后一個元素已經是最大的了,因此最后一個元素不用比較。
var arr = [10,20,5,8,21,100,99];
for(var i = 0;i<arr.length;i++) { for(var k = 0; k < arr.length-i-1; k++) { if(arr[k]>arr[k+1]){ var temp = arr[k+1]; arr[k+1] = arr[k]; arr[k] = temp; } } } console.log(arr); // [5, 8, 10, 20, 21, 99, 100]
2、sort排序:【這個用的比較多】
var a=[10,20,5,8,21,100,99];
a.sort(function(n1,n2){ return n1-n2; }); console.log(a) // [5, 8, 10, 20, 21, 99, 100]
二、數組去重
function unique(arr) {
let brr=[]; for (let i=0; i<arr.length; i++) { if (brr.indexOf(arr[i]) < 0) { brr.push(arr[i]); } } return brr; }
三、數組中最大差值
四、數組中的最大值
1、先排序,在獲取
五、數組交集並集差集
1、現有兩數組a = [1, 2, 3],b = [2, 4, 5],求a,b數組的並集,交集和差集。
算法實踐
1、對一個對象數組按照對象某個屬性進行排序 : https://www.cnblogs.com/webcabana/p/7460038.html
在做公交的項目中就碰到過這種算法問題,從后台請求回來的一大堆的數據,都需要前端處理。所以就把這個問題寫進博客里。
只要是 js的sort()方法 的使用:https://www.cnblogs.com/fnz0/p/7680297.html
sort()方法 的執行過程:
(個人分析) sort()函數的 比較函數,在執行時,js程序會依次把 數組的項,兩個兩個的傳遞給比較函數的形參。
根據比較函數的返回值 是否大於0,再決定傳遞進來的這兩項是否要對換位置。
arr.sort(function(a,b){ return a-b; // return的值為 正或0,則數組中a、b對應的實參 不調換位置。 }); // return的值為 負,則數組中a、b對應的實參 調換位置。
通過測試,發現數組arr中的取某兩個項的組合,並沒有全部都進入了比較函數中(這個內部是怎么實現的,我們可以不用深究),
但是最后的結果就是按照順序return中要求的比較的規則進行排序了。
var arr = [4,3,8,2,6]; console.log("起始",arr); arr.sort(function(a,b){ console.log(a,b); // 這里輸出的並沒有把arr所有的組合全部都執行了一遍比較函數,內部肯定通過某種方式實現了最少次的比較,得到數值所有項按照順序排列。 return a-b; // 這里內部具體是通過什么機制實現的最少次比較的,可以不用太過深究 }); // 4 3 // 4 8 // 8 2 // 4 2 // 3 2 // 8 6 // 4 6
2、冒泡排序(將數值按照大小順序進行排列): https://www.cnblogs.com/dushao/p/6004883.html
3、數組中的最小值和最大值:https://www.cnblogs.com/zhouyangla/p/8482010.html 或 https://www.cnblogs.com/ywx354980-bk/p/8718541.html
a、排序法:
b、js中Math 對象的 min 和 max 方法 :
min 和 max 方法的參數都是數值,而不是數組。所以要利用min和max方法必須要把數組的值一個一個取出來作為參數。
apply方法 的第二個參數是數組,傳遞到 劫持(繼承)對象方法的參數, 是數組中的值一個一個傳遞過去(而不是一個對象)。即 apply數組參數 --> 繼承對象方法的arguments。而對象的參數是 arguments[ i ]
注:不過es6中有一個 展開運算符(...),可以將數值或對象兩邊的 [] 或 {} 去掉的功能。所以min 和 max可以通過 展開運算符 直接實現。
4、數組中所有的值 與 一個已知值的 的差值的最小值:
個人體會:算法基本 和 數組有關,所以數組有關的API要熟練。
總結:一般在js中涉及到的算法就 排序算法、二分查找、動態規划(最好避免使用遞歸的算法,效率太低了,容易引起瀏覽器假死狀態)
別人的關於js算法的博客:
1、JS常見的算法 : https://www.cnblogs.com/lvmylife/p/7208541.html
查找有: 線性查找、二分查找