var ids = [11,22,333];
(function sendRequest(){
var id = shift();
if(id){
$.ajax({url:"/get",data:{id}}).always(function(){
//do sth
console.log("finished");
sendRequest();
});
}else {
console.log("finished");
}
})();
//遞歸實(shí)現(xiàn)串行請求不堵塞
function getElementById(node,id){
if(!node) return null;
if(node.id === id) return node;
for (var i = 0; index < node.childNodes.length; i++) {
var found = getElementById(node.childNodes[i],id);
if(found) return found;
}
return null;
}
//深度優(yōu)先地遞歸遍歷DOM樹查找id
function getElementById(node,id){
// 遍歷所有的Node
while(node){
if(node.id === id) return node;
node = nextElement(node);
}
return null;
}
function nextElement(node){
if(node.children.length) {
return node.children[0];
}
if(node.nextElementSibling){
return node.nextElementSibling;
}
while(node.parentNode){
if(node.parentNode.nextElementSibling);
}
while(node.parentNode){
if(node.parentNode.nextElementSibling) {
return node.parentNode.nextElementSibling;
}
node = node.parentNode;
}
return null;
}
//深度優(yōu)先地非遞歸遍歷DOM樹查找id
function bubbleSort(arr){
var i = 0,
j = 0;
for (var i = 1; i < arr.length; i++) {
for (j=0; j<=arr.length-i; j++){
var temp = 0;
// ">"從小到大排序
// "<"從大到小排序
if(arr[j] > arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
return arr;
}
// 冒泡排序
function quick(arr,l,r){
if(l < r){
var i = l,j = r,x = arr[i];
while(i<j){
while(i<j && arr[j]>x)
j--;
if(i<j)
//這里用i++福稳,被換過來的必然比x小,賦值后直接讓i自加蒸苇,不用再比較迎瞧,可以提高效率
arr[i++] = arr[j];
while(i<j && arr[i]<x)
i++;
if(i<j)
//這里用j--刚盈,被換過來的必然比x大钠至,賦值后直接讓j自減钟沛,不用再比較矾柜,可以提高效率
arr[j--] = arr[i];
}
arr[i] = x;
quickSort(arr,l,i-1);
quickSort(arr,i+1,r);
}
}
//快速排序
function palindrome(str) {
return str === str.split('').reverse().join('')
}
function palindrome(str) {
// \W匹配任何非單詞字符窄刘。等價于“[^A-Za-z0-9_]”窥妇。
var re = /[\W_]/g;
// 將字符串變成小寫字符,并干掉除字母數(shù)字外的字符
var lowRegStr = str.toLowerCase().replace(re,'');
// 如果字符串lowRegStr的length長度為0時,字符串即是palindrome
if(lowRegStr.length===0) return true;
// 如果字符串的第一個和最后一個字符不相同都哭,那么字符串就不是palindrome
if(lowRegStr[0]!=lowRegStr[lowRegStr.length-1]) return false;
//遞歸
return palindrome(lowRegStr.slice(1,lowRegStr.length-1));
}
// 判斷回文字符串
function getMostFreq(str) {
if(str.length == 1) {
return str;
}
var dict = {}
for (var i = 0; i < str.length; i++) {
if(dict[str[i]]){
++dict[str[i]]
}else{
dict[str[i]] = 1
}
}
var count = 0
var maxValue
for (key in dict){
if (dict[key] > count) {
maxValue = key
count = dict[Key]
}
}
console.log(count,maxValue)
}
//統(tǒng)計(jì)字符串里出現(xiàn)出現(xiàn)頻率最多的字符
function randomStr(len) {
var dict = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
var str = ''
for (var i = 0; i < len; i++) {
str +=dict[random(0,62)]
}
return str
}
//生成一個長度為 n 的隨機(jī)字符串秩伞,字符串字符的取值范圍包括0到9,a到 z欺矫,A到Z
function unique(arr){
var obj = {}
var result = []
for (var i in arr){
if(!obj[arr[i]]){
obj[arr[i]] = true;
result.push(arr[i]);
}
}
return result;
}
function unique(arr){
return Array.from(new Set(arr));
}
function uniqueArray(arr){
for(var i = 0;i < arr.length-1;i++){
for(var j = i+1; j<arr.length; j++){
if(arr[j] === arr[i]){
arr.splice(j--,1);
}
}
}
return arr;
}
// 數(shù)組去重
function getMaxProfit(arr){
var min = arr[0],
var max = arr[0];
for (var i = 0; i < arr.length; i++){
if(arr[i] < min) min = arr[i];
if(arr[i] > max) max = arr[i];
}
return max-min;
}
//數(shù)組中最大差值
function match(node,selector){
if(node === document) return false;
switch(selector.matchType){
//如果是類選擇器
case "class":
return node.className.trim().split(/+/).indexOf(selector.value)>=0;
// 如果是標(biāo)簽選擇器
case"tag":
return node.tagName.toLowerCase()===selector.value.toLowerCase();
defualt:
console.log("unknown selector match type");
}
}
function nextTarget(node,selector){
if(!node || node === document) return null;
switch(selector.relation){
case"descendant":
return{node:node.parentNode,hasNext:true};
case"child":
return {node:node.parentNode,hasNext:false};
case"sibling":
return {node:node.previousSibling,hasNext:true};
default:
console.log("unknown selector relation type");
//hasNext表示當(dāng)前選擇器relation是否允許繼續(xù)找下一個節(jié)點(diǎn)
}
}
function querySelector(node,selectors){
while(node){
var currentNode = node;
if(!match(node,selectors[0])){
node = nextElement(currentNode);
continue;
}
var next = null;
for (var i = 0; i < selectors.length-1; i++) {
var matchIt = false;
do{
next = nextTarget(node,selectors[i]);
node = next.node;
if(!node) break;
if(match(node,selectors[i+1])){
matchIt = true;
break;
}
}while(next.hasNext);
if(!matchIt) break;
}
if(matchIt && i === selectors.length - 1){
return currentNode;
}
node = nextElement(currentNode);
}
return null;
}
// 復(fù)雜選擇器的查DOM
var lastHouses = new Map();
function filter House(houses){
var remainHouses = [],
var newHouses = [];
houses.map(house => lastHouses.has(house.id)?remainHouses.push(house):newHouses.push(house));
newHouses.map(house => lastHouses.set(house.id,house));
return {remainHouses,newHouses};
}
// 重復(fù)值處理
function randomIndex(arr){
for(var i =0; i<arr.length;i++){
var swapIndex = parseInt(Math.random()*(arr.length-i))+i;
var tmp = arr[i];
arr[i] = arr[swapIndex];
arr[swapIndex] = tmp;
}
}
// 數(shù)組元素隨機(jī)分布
$(window).on("resize",adjustSlider);
$(window).on("resize",function(){
throttling(adjustSlider);
});
function throttling(method,throttlingTime){
if(typeof method.tId === "undefined"){
method.tId = 0;
method.call(context,data);
return;
}
//第一次觸發(fā)立刻執(zhí)行
var tId = method.tId;
if(!tId){
method.tId = setTimeout(function(){
method();
method.tId = 0;
},throttlingTime || 500);
}
}
// 節(jié)流纱新,使事件觸發(fā)不會太快,如500ms觸發(fā)一次
前端常用算法的JS實(shí)現(xiàn)(野路子補(bǔ)基礎(chǔ)系列)
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門化戳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來单料,“玉大人,你說我怎么就攤上這事∩猓” “怎么了白对?”我有些...
- 文/不壞的土叔 我叫張陵,是天一觀的道長换怖。 經(jīng)常有香客問我甩恼,道長,這世上最難降的妖魔是什么沉颂? 我笑而不...
- 正文 為了忘掉前任条摸,我火速辦了婚禮,結(jié)果婚禮上兆览,老公的妹妹穿的比我還像新娘屈溉。我一直安慰自己,他們只是感情好抬探,可當(dāng)我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著帆赢,像睡著了一般小压。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上椰于,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼笛谦!你這毒婦竟也來了抱虐?” 一聲冷哼從身側(cè)響起,我...
- 序言:老撾萬榮一對情侶失蹤饥脑,失蹤者是張志新(化名)和其女友劉穎恳邀,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體灶轰,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡谣沸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了笋颤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乳附。...
- 正文 年R本政府宣布贤重,位于F島的核電站茬祷,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏并蝗。R本人自食惡果不足惜祭犯,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望滚停。 院中可真熱鬧沃粗,春花似錦、人聲如沸键畴。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽起惕。三九已至涡贱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間惹想,已是汗流浹背问词。 一陣腳步聲響...
- 正文 我出身青樓,卻偏偏與公主長得像锋叨,于是被迫代替她去往敵國和親垄分。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 算法五個重要特征: 有窮性:保證執(zhí)行有限步驟之后結(jié)束悲柱; 確切性:每一步驟都有確切的定義锋喜; 輸入:每個算法有零個或多...
- 《1》 七月嘿般,南方,多雨的季節(jié)涯冠,城市經(jīng)常的被突如其來的大雨沖洗炉奴,空氣夾雜著微濕的水分子的味道。 每天都看著天氣來騰...
- 加入小灶群以來砸逊,看著貓友們各種心得交流璧南,技能分享,隨著時間的累積师逸,在我看來司倚,所有的貓友都在成長,突飛猛進(jìn)...
- 無攻擊任何文章及作者的意思篓像,今早看了一篇文章 文章甚至列出了愛因斯坦动知,赫本等有名人士,他們雖然愛安靜员辩,雖然愛獨(dú)處盒粮,...