javascript的一些算法的实用小技巧
一、交换两个数字的值
我们交换两个数字的值想到的方法一般就是用一个新的变变量,让他把一个数存起来,然后在交换两个数字的值,看下面这种。
1 2 3 4 5 6 7 | var a = 1, b = 2; //交换两个数字的值 var c; c = a; a = b; b = c; |
看下面这段代码,也可以交换两个数字的值,如果这样写你会不会发现特别高大上。
1 2 3 | var a = 1, b = 2; a = [b, b = a][0]; |
1 | 这里其实是a = [][0]数组下标为0的那个,然后 b = a; 这样也可以交换两个数字的值了。 |
二、数组的排序
1.数组方法中的sort排序方法。
1 2 3 4 5 | 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.冒泡排序法 (由小到大排列)
1 2 3 4 5 6 7 8 | 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.选择升序法(由小到大排列)
1 2 3 4 5 6 7 8 | 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里面所有的属性名
1 2 3 4 5 6 7 8 9 | var json = { a : 1, b : 2, nam : 'Z' , clas2 : '我们的' } for ( var i in json){ console.log(i) } |
2.我们打印出来的i会是json里面所有的属性名,那么他是怎么循环的呢,我当时一直不太清楚,你尝试一下下面这段代码看一下效果。
1 2 3 4 5 6 7 8 | var json = { a : 1, b : 2, nam : 'Z' , clas2 : '我们的' } for ( var i in json); console.log(i) |
我们在for in 循环的这一行给了一个分号结束语句,然后打印出来i我们会发现他是class2,现在你大概明白了吧,每一次循环这个i代表的就是json本次循环得到的属性名,他不是代表的一个数组,而是代表一个值。
3.for in 循环遍历出json里面所有的值
1 2 3 4 5 6 7 8 9 | var json = { a : 1, b : 2, nam : 'Z' , clas2 : '我们的' } for ( var i in json){ console.log(json[i]) } |
四、for in循环遍历数组
1 2 3 4 5 | var a = [1,2,5,6,777,6,21]; for ( var i in a){ console.log(i) //这里打印出来的是所有的下标 console.log(a[i]) //这里打印出来的是数组里面所有的值 } |
五、遍历json属性到数组
1.这个里面用到的是每一次用数组的长度来代表他的下标,然后将json里面的属性名遍历到a数组中。
1 2 3 4 5 6 7 8 9 | var json = { a : 1, b : 111, nam : 'z' , clas2 : 1 } var a = []; for (a[a.length] in json); console.log(a) |
2.遍历json的属性的值到数组中
1 2 3 4 5 6 7 8 9 10 11 | var json = { a : 1, b : 111, nam : 'z' , clas2 : 1 } var a = []; for ( var i in json){ a[a.length] = json[i]; } console.log(a) |
六、判断浏览器是不是IE678
1 2 3 | if (!-[1,]){ alert( '这是ie678' ); } |
说出来你可能不信,
原理
1. 请你试一下 alert([1,2,].length)浏览器中弹窗的数字是多少
谷歌 火狐 一些的弹窗都是2,所以后面的那个逗号浏览器判断是不算的
但是在IE6 7 8 中弹窗出的数字是 3 ,
所以Number( [1,])这个东西在谷歌,火狐的眼中就是1,但是在IE678心中他就是NaN
2. 前面的 - 号 隐式转换为Number型
3 取反 判断内的值为true,所以可以在这里面判断成。
如果你看到我的文章可以收获一些知识,那么我会非常高兴的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?