javascript的一些演算法的實用小技巧

来源:http://www.cnblogs.com/z937741304/archive/2017/10/29/7751770.html
-Advertisement-
Play Games

一、交換兩個數字的值 我們交換兩個數字的值想到的方法一般就是用一個新的變變數,讓他把一個數存起來,然後在交換兩個數字的值,看下麵這種。 看下麵這段代碼,也可以交換兩個數字的值,如果這樣寫你會不會發現特別高大上。 二、數組的排序 1.數組方法中的sort排序方法。 這是數組方法中的sort排序方法,如 ...


一、交換兩個數字的值

  我們交換兩個數字的值想到的方法一般就是用一個新的變變數,讓他把一個數存起來,然後在交換兩個數字的值,看下麵這種。

var a = 1,
      b = 2;
//交換兩個數字的值
    var c;
    c = a;
    a = b;
    b = c;

  看下麵這段代碼,也可以交換兩個數字的值,如果這樣寫你會不會發現特別高大上。

 var a = 1,
     b = 2;
 a = [b, b = a][0];
這裡其實是a = [][0]數組下標為0的那個,然後 b = a; 這樣也可以交換兩個數字的值了。

 

二、數組的排序

 1.數組方法中的sort排序方法。

 var a = [9,8,8,6,1,2,4,56];
    a.sort(function(a,b){
    	return a - b;//由小到大排序
    })
    console.log(a)

  這是數組方法中的sort排序方法,如果return b - a; 就是由大到小排序,其中的原理是什麼呢,其實就是冒泡排序法

 2.冒泡排序法 (由小到大排列)

var a = [9,8,7,6,5,4,3,2,1];
for(var i=0; i<a.length-1; i++){
   for(var j=0; j<a.length-i; j++){
       if(a[j]>a[j+1])
           a[j] = [a[j+1], a[j+1]=a[j]][0];		
    }
}
console.log(a)

 3.選擇升序法(由小到大排列)

 var a = [9,8,7,5,6,4,1,3,1];
    for(var i=0; i<a.length-1; i++){
    	for(var j=i+1; j<a.length; j++){
    		if(a[i]>a[j])
                a[i] = [a[j],a[j]=a[i]][0];
    	}
    }
    console.log(a)

三、for in 迴圈 遍歷json

  我學習for in迴圈的時候是在學json的時候學到的,看下麵這段代碼。

  1.for in迴圈遍歷出json裡面所有的屬性名

 	var json = {
   		a : 1,
   		b : 2,
   		nam : 'Z',
   		clas2 : '我們的'
   	}
   	for(i in json){
   		console.log(i)
   	}

  2.我們列印出來的i會是json裡面所有的屬性名,那麼他是怎麼迴圈的呢,我當時一直不太清楚,你嘗試一下下麵這段代碼看一下效果。

	var json = {
   		a : 1,
   		b : 2,
   		nam : 'Z',
   		clas2 : '我們的'
   	}
   	for(i in json);
   		console.log(i)

  我們在for in 迴圈的這一行給了一個分號結束語句,然後列印出來i我們會發現他是class2,現在你大概明白了吧,每一次迴圈這個i代表的就是json本次迴圈得到的屬性名,他不是代表的一個數組,而是代表一個值。

  3.for in 迴圈遍歷出json裡面所有的值

	var json = {
   		a : 1,
   		b : 2,
   		nam : 'Z',
   		clas2 : '我們的'
   	}
   	for(i in json){
   		console.log(json[i])
   	}

 四、for in迴圈遍曆數組

var a = [1,2,5,6,777,6,21];
for(i in a){
   console.log(i)  //這裡列印出來的是所有的下標
   console.log(a[i]) //這裡列印出來的是數組裡面所有的值
}

 五、遍歷json屬性到數組

1.這個裡面用到的是每一次用數組的長度來代表他的下標,然後將json裡面的屬性名遍歷到a數組中。

var json = {
 	a : 1,
 	b : 111,
 	nam : 'z',
 	clas2 : 1
 }
 var a = [];
 for(a[a.length] in json);
 	console.log(a)

 2.遍歷json的屬性的值到數組中

var json = {
 		a : 1,
 		b : 111,
 		nam : 'z',
 		clas2 : 1
 	}
 	var a = [];
 	for(i in json){
 		a[a.length] = json[i];
 	}
   	console.log(a)

  

六、判斷瀏覽器是不是IE678

if(!-[1,]){
    alert('這是ie678');
}

 說出來你可能不信,

原理

1.    請你試一下  alert([1,2,].length)瀏覽器中彈窗的數字是多少

  谷歌 火狐 一些的彈窗都是2,所以後面的那個逗號瀏覽器判斷是不算的

  但是在IE6 7 8 中彈窗出的數字是 3 ,

  所以Number( [1,])這個東西在谷歌,火狐的眼中就是1,但是在IE678心中他就是NaN

2.  前面的 - 號  隱式轉換為Number型

3 取反 判斷內的值為true,所以可以在這裡面判斷成。

 

   如果你看到我的文章可以收穫一些知識,那麼我會非常高興的。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在js已有的基本類型(字元串,數值,布爾型,null和undefined)之外,es6引入了一種新的基本類型:==符號(Symbol)==。符號起初被設計用於創建對象私有成員。 符號沒有字面量形式,你可以使用全局Symbol函數來創建一個符號值。 Symbol還可以接受一個額外的參數用於描述符號值。 ...
  • js 數組的push方法,想必大家都知道是向數組末尾添加元素,但是有一個很關鍵的點需註意: 引自 MDN 返回值 當調用該方法時,新的 length 屬性值將被返回。 數組push之後返回的是length,而不是新的數組,如果不清楚這點,在使用過程中回遇到很大的坑。 順帶記一下其他幾個數組的方法返回 ...
  • var聲明與變數提升 使用var關鍵字聲明的變數,無論其實際聲明位置在何處,都會被視為聲明於所在函數的頂部(如果聲明不在任意函數內,則視為在全局作用域的頂部)。這就是所謂的變數提升。 塊級聲明 塊級聲明就是讓所聲明的變數在指定塊的作用域外無法被訪問。塊級作用域在如下情況被創建: 1. 一個函數內部 ...
  • 引言 JavaScript程式使用Unicode字元集編寫。Unicode是ASCII和Latin 1的超集,並支持地球上幾乎所有在使用的語言。ECMAScript3要求JavaScript的實現必須支持Unicode2.1及後續版本,ECMAScript5則要求支持Unicode3及後續版本。 區 ...
  • 1. 通過 2. 通過非同步請求 3. 通過jQuery ...
  • 備註:第一次翻譯技術文章,標題都糾結了好久不知道腫麽翻譯,如發現翻譯不當之處,可點擊github鏈接提交評論,thx~ 前幾天我為一個項目寫README文檔,我希望其他開發者能夠看到這個項目,並從中學到一些東西。突然我意識到,若放在幾年前,我寫作的過程中隨口提到的Node,npm,Homebrew, ...
  • 一.介紹 本篇是續上一篇的,引用類型的後篇,本篇主要是說基本包裝類型和個體內置對象。如果你能收穫一些知識,那我很高興,很滿足,哈哈哈,希望大家能愉快看完。如果你想學好一門技術,要不忘初心,方得始終。 二.基本包裝類型 先說明基本包裝類型也是屬於引用類型,是接著上一篇的,強調一下. 然後我們記住兩句話 ...
  • ## 寫在前面 因為對Vue.js很感興趣,而且平時工作的技術棧也是Vue.js,這幾個月花了些時間研究學習了一下Vue.js源碼,並做了總結與輸出。 文章的原地址:[https://github.com/answershuto/learnVue](https://github.com/answer ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...