js一些算法小技巧
发布时间:2017-10-30, 17:07:19 分类:HTML | 编辑 off 网址 | 辅助
正文 2588字数 312,743阅读
一、交换两个数字的值
我们交换两个数字的值想到的方法一般就是用一个新的变变量,让他把一个数存起来,然后在交换两个数字的值,看下面这种。
看下面这段代码,也可以交换两个数字的值,如果这样写你会不会发现特别高大上。
这里其实是a = [][0]数组下标为0的那个,然后 b = a; 这样也可以交换两个数字的值了。
我们交换两个数字的值想到的方法一般就是用一个新的变变量,让他把一个数存起来,然后在交换两个数字的值,看下面这种。
var a = 1,
b = 2;
//交换两个数字的值
var c;
c = a;
a = b;
b = c;
Run code
Cut to clipboard
看下面这段代码,也可以交换两个数字的值,如果这样写你会不会发现特别高大上。
var a = 1,
b = 2;
a = [b, b = a][0];
Run code
Cut to clipboard
这里其实是a = [][0]数组下标为0的那个,然后 b = a; 这样也可以交换两个数字的值了。
二、数组的排序
1.数组方法中的sort排序方法。
这是数组方法中的sort排序方法,如果return b - a; 就是由大到小排序,其中的原理是什么呢,其实就是冒泡排序法
2.冒泡排序法 (由小到大排列)
3.选择升序法(由小到大排列)
1.数组方法中的sort排序方法。
var a = [9,8,8,6,1,2,4,56];
a.sort(function(a,b){
return a - b;//由小到大排序
})
console.log(a)
Run code
Cut to clipboard
这是数组方法中的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)
Run code
Cut to clipboard
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)
Run code
Cut to clipboard
三、for in 循环 遍历json
1.for in循环遍历出json里面所有的属性名
2.我们打印出来的i会是json里面所有的属性名,那么他是怎么循环的呢,你尝试一下下面这段代码看一下效果。
我们在for in 循环的这一行给了一个分号结束语句,然后打印出来i我们会发现他是class2,现在你大概明白了吧,每一次循环这个i代表的就是json本次循环得到的属性名,他不是代表的一个数组,而是代表一个值。
3.for in 循环遍历出json里面所有的值
1.for in循环遍历出json里面所有的属性名
var json = {
a : 1,
b : 2,
nam : 'Z',
clas2 : '我们的'
}
for(i in json){
console.log(i)
}
Run code
Cut to clipboard
2.我们打印出来的i会是json里面所有的属性名,那么他是怎么循环的呢,你尝试一下下面这段代码看一下效果。
var json = {
a : 1,
b : 2,
nam : 'Z',
clas2 : '我们的'
}
for(i in json);
console.log(i)
Run code
Cut to clipboard
我们在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])
}
Run code
Cut to clipboard
四、for in循环遍历数组
var a = [1,2,5,6,777,6,21];
for(i in a){
console.log(i) //这里打印出来的是所有的下标
console.log(a[i]) //这里打印出来的是数组里面所有的值
}
Run code
Cut to clipboard
五、遍历json属性到数组
1.这个里面用到的是每一次用数组的长度来代表它的下标,然后将json里面的属性名遍历到a数组中。
2.遍历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)
Run code
Cut to clipboard
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)
Run code
Cut to clipboard
六、判断浏览器是不是IE678
原理
1.alert([1,2,].length)浏览器中弹窗的数字
谷歌 火狐 一些的弹窗都是2,所以后面的那个逗号浏览器判断是不算的
但是在IE6 7 8 中弹窗出的数字是 3 ,
所以Number( [1,])这个东西在谷歌,火狐的眼中就是1,但是在IE678心中他就是NaN
2.前面的 - 号 隐式转换为Number型
3.取反 判断内的值为true
if(!-[1,]){
alert('这是ie678');
}
Run code
Cut to clipboard
原理
1.alert([1,2,].length)浏览器中弹窗的数字
谷歌 火狐 一些的弹窗都是2,所以后面的那个逗号浏览器判断是不算的
但是在IE6 7 8 中弹窗出的数字是 3 ,
所以Number( [1,])这个东西在谷歌,火狐的眼中就是1,但是在IE678心中他就是NaN
2.前面的 - 号 隐式转换为Number型
3.取反 判断内的值为true
(支付宝)给作者钱财以资鼓励 (微信)→
有过 2 条评论 »
最好写成 for(var i in json) 否则i就变成全局的了, 会污染整个window
int a = 2;
int b = 3;
a = a^b;
b = a^b;
a= a^b;