數(shù)組去重
- 方法1:用for雙重循環(huán)
var ary=[1,2,3,5,6,7,8,89,4,3,12,1,1,2,3,4,54,65,2];
for(var i=0;i<ary.length;i++){
var cur=ary[i];
for(var j=i+1;j<ary.length;j++){
if (ary[i]==ary[j]){
ary.splice(i,1);
i--; //防止數(shù)組塌陷
}
}
}
- 方法2:先sort,然后用當(dāng)前項(xiàng)和相鄰項(xiàng)進(jìn)行比較
var ary=[1,2,3,5,6,7,8,89,4,3,12,1,1,2,3,4,54,65,2];
var newary=ary.sort(function (n,m) {
return n-m;
})
for (var i=0;i<ary.length;i++){
if (newary[i]==newary[i+1]){
newary.splice(i,1);
i--; //防止數(shù)組塌陷
}
else {
}
}
- 方法3:建立新數(shù)組,用indexOf
var ary=[1,2,3,5,6,7,8,89,4,3,12,1,1,2,3,4,54,65,2];
var search=[];
for (var i=0;i<ary.length;i++){
if(search.indexOf(ary[i])==-1){
search.push(ary[i]);
}
}
- 方法4:利用函數(shù)不重名的屬性
var ary=[1,2,3,5,6,7,8,89,4,3,12,1,1,2,3,4,54,65,2];
var obj={};
for (i=0;i<ary.length;i++){
if(obj[ary[i]]){
ary.splice(i,1);
i--; //防止數(shù)組塌陷
}
else {
obj[ary[i]]=ary[i];
}
}
- 方法5:利用對象不重名的特性芥永,實(shí)現(xiàn)了重復(fù)次數(shù)的記錄,里面用到兩個(gè)循環(huán)钝吮,一個(gè)for循環(huán)恤左,for..in循環(huán)
var ary=[1,2,3,5,6,7,8,89,4,3,12,1,1,2,3,4,54,65,2];
var obj={};
for (i=0;i<ary.length;i++){
if (obj[ary[i]]){
obj[ary[i]]+=1;
}
else {
obj[ary[i]]=1;
}
}
var sum=[];
for (var item in obj){
sum.push(Number(item));
}
算法
數(shù)組排序(三種方法)
快排(利用取中間值的方法快速排序)
- 1:先拿到中間的索引,通過中間索引找到他對應(yīng)的項(xiàng)
- 這個(gè)中間項(xiàng)搀绣,是從數(shù)組中拎出來,即數(shù)組中沒有他了戳气,所以链患,只能用splice赁遗;
- splice的返回值嫡霞,是被刪除的內(nèi)容以新數(shù)組的形式返回,因?yàn)槲覀儎h除了一項(xiàng)兼蕊,所以,要去數(shù)字必須用[0];
- 2:創(chuàng)建兩個(gè)新數(shù)組left贸毕,right郑叠;
- 3:用ary數(shù)組跟中間項(xiàng)比較,比他小的放left數(shù)組明棍,比他大的放right數(shù)組
- 4: return quciksort(left).concat([center],quciksort(right));
- 函數(shù)自己調(diào)用自己乡革,屬于"遞歸"
- 5:停止拆分的條件 if(ary.length<=1){return ary;}
- return 1)有阻斷程序執(zhí)行的功能 2)返回值;
var ary=[1,6,4,2,9,12,34,67,89,54];
function quicksort(ary) {
if (ary.length<=1){
return ary;
}
var middle=Math.floor(ary.length/2);
var centermiddle=ary.splice(middle,1)[0];
var left=[];
var right=[];
for(var i=0;i<ary.length;i++){
if (ary[i]>centermiddle){
right.push(ary[i]);
}
else {
left.push(ary[i]);
}
}
return quicksort(left).concat(centermiddle,quicksort(right));
}
var res=quicksort(ary);
document.write(res);
插排
1摊腋、先從ary中取出來一個(gè)數(shù)字沸版,單獨(dú)是個(gè)數(shù)組 splice
2、遍歷ary的數(shù)組兴蒸,跟left數(shù)組视粮,從后往前的比較,如果比left的數(shù)字小橙凳,繼續(xù)往前比蕾殴,如果比某個(gè)值大,就插入到這個(gè)值的下一項(xiàng)的前面岛啸;(必須break钓觉,否則就會(huì)出錯(cuò)) ;如果比所有的都小值戳,那就插入到left數(shù)組的第一個(gè)议谷;
ary = [23, 45, 32, 12, 9, 0, 5, 4, 3, 1];
function search(ary) {
var left = ary.splice(0, 1);
for (i = 0; i < ary.length; i++) {
var cur = ary[i];
for (j = left.length - 1; j >= 0;) {
if (cur < left[j]) {
j--;
if (j == -1) {
left.unshift(cur);
}
}
else {
left.splice(j+1,0,cur);
break;
}
}
}
return left;
}
var ser=search(ary);
document.write(ser);
冒泡排序
1、兩重循環(huán)堕虹,第一重循環(huán)代表的是輪數(shù)卧晓,第二重循環(huán)代表的次數(shù),比較的次數(shù)在一次次的減少赴捞;
2逼裆、 每次比較的時(shí)候,都拿當(dāng)前項(xiàng)跟后一項(xiàng)進(jìn)行比較赦政,如果比他大胜宇,交換位置;
var ary=[23,21,12,6,1,32,8];
/*
*第一輪 最多可以比6次 已經(jīng)把最大值放在最后了
* [21,23,12,6,1,32,8]
* [21,12,23,6,1,32,8]
* [21,12,6,23,1,32,8]
* [21,12,6,1,23,32,8]
* [21,12,6,1,23,32,8]
* [21,12,6,1,23,8,32]
*第二輪 最多可以比5次恢着, 可以把次大值和最大值桐愉,放在后面
* [12,21,6,1,23,8,32]
* [12,6,21,1,23,8,32]
* [12,6,1,21,23,8,32]
* [12,6,1,21,23,8,32]
* [12,6,1,21,8,23,32]
*第三輪 最多可以比4次 已經(jīng)把最大的三個(gè)值放在后面
* [6,12,1,21,8,23,32]
* [6,1,12,21,8,23,32]
* [6,1,12,21,8,23,32]
* [6,1,12,8,21,23,32]
*第四輪 最多可以比3次 已經(jīng)最大的四個(gè)值放在侯民啊
*[1,6,12,8,21,23,32]
*[1,6,12,8,21,23,32]
*[1,6,8,12,21,23,32]
*第五輪 最多可以比2次
* [1,6,8,12,21,23,32]
* 第六輪 最多可以1次;
* 第七輪 最多可以比0次掰派;
*
* */
//外面的循環(huán)應(yīng)該是比較的"輪數(shù)"
for(var i=0; i<ary.length; i++){
//里面比較的是次數(shù)
for(var j=0; j<ary.length-1-i; j++){
if(ary[j]>ary[j+1]){
//找了一個(gè)臨時(shí)的空容器
var tmp=ary[j];
ary[j]=ary[j+1];
ary[j+1]=tmp;
}
}
}
驗(yàn)證碼的兩種方式
- 利用while循環(huán)
var strcude='asdfghjkloiuy789SDRTBYH';
var ary=[];
while (ary.length<4){
var num=Math.round(Math.random()*22);
if (ary.indexOf(strcude[num])==-1){
ary.push(strcude[num]);
}
}
document.write(ary);
- 利用for循環(huán)
var strcude='asdfghjkloiuy789SDRTBYH';
var ary=[];
for(var i=0;i<4;i++){
var num=Math.round(Math.random()*22);
if(ary.indexOf(strcude[num])==-1){
ary.push(strcude[num]);
}
else {
i--;
}
}
document.write(ary);
跟函數(shù)相關(guān)的
- 阻斷函數(shù)的執(zhí)行 return从诲;
跟循環(huán)相關(guān)的
- break 阻斷循環(huán)的執(zhí)行
- continue 本次不執(zhí)行,以后繼續(xù)靡羡,不能用在while循環(huán)中系洛;
Math常用的方法
- Math.ceil() 向上取整
- Math.floor() 向下取整
- Math.random() 取0~1之間的隨機(jī)小數(shù)俊性,不包含1;
- Math.round(Math.random()*(m-n)+n); 取n~m之間的隨機(jī)整數(shù)描扯,包含m
- Math.round() 四舍五入定页,取整數(shù)
- Math.pow(2,3) 冪次方
- Math.sqrt() 開平發(fā)
- Math.abs() 取絕對值
數(shù)組
- 從數(shù)組末尾刪除一項(xiàng),有哪些方法绽诚?
- ary.length--
- ary.length-=1; ary.length=ary.lengty-1;
- ary.pop()
- ary.splice(ary.length-1,1)
- 給數(shù)組末尾增加一項(xiàng)
- ary[ary.length]=xxx;
- ary.push()
- ary.splice(ary.length,'xxx')
- 數(shù)組的克隆
- slice()/ slice(0)
- ary.concat();
- ary.splice(0)
選項(xiàng)卡封裝
- 功能:
1)可以讓一個(gè)頁面中多個(gè)容器都有選項(xiàng)卡的功能
2)通過第二個(gè)參數(shù)典徊,設(shè)置默認(rèn)點(diǎn)亮項(xiàng) - 如果參數(shù)可有可無 ||的思想 var selectIndex=selectIndex%aBtn.length||0;
- %的思想;