var s="A man, a plan, a canal: Panama"
1.數(shù)組去掉空格和標(biāo)點(diǎn)符號并轉(zhuǎn)為大寫
var?str=s.replace(/(\W|_)/g,"").toUpperCase();
2.數(shù)組刪除指定下標(biāo)
第一種? ?splice? (刪除的同時(shí)把該元素所占的空間也刪除? ,后面向前補(bǔ))
arr.splice(a,b)? //a為刪除的指定下標(biāo)? ?b為從a下標(biāo)開始刪除幾個(gè)
? ?splice還有多種用法??
? ? ? ? ? ? var? c=['a','b','c','d','e','f'];? ??
? ? ? ? ? ?1.添加?? ?c.splice(1,0,'str');?//結(jié)果arr=['a','str','b','c','d','e','f'];
? ? ? ? ? ?2.替換:?c.splice(1,1,'str');?//結(jié)果arr=['a','str','c','d','e','f'];
? ? ? ? ? ? 這兩種用法? 括號里的值代表(指定下標(biāo)兔魂,0為添加? 大于0的都為替換數(shù)量 也就是說 從當(dāng)前下標(biāo)要替換幾個(gè)族跛, 要添加或者替換的值 )
第二種? ?delete? ? (只刪除元素? 捐康,當(dāng)前元素下標(biāo)為? undefined)
delete? arr[下標(biāo)];
3.把數(shù)組通個(gè)某個(gè)符號連接起來拼成一個(gè)字符串
var arr1=['你','好','哇']庸蔼;
var arr1str=arr1.jion(',')? ? ?//括號里需要加引號哦? ? ?輸出你,好,哇
在把字符串變成數(shù)組則可以用 split(‘,’) //也需要引號? ? 輸出?['你','好','哇']
4.數(shù)組合并? (返回一個(gè)新的數(shù)組)
(參考https://www.jb51.net/article/172722.htm)
var a=[1,2,3];
var b=[4,5,6];
第一種? ? concat()??
? ??js的Array對象提供了一個(gè)叫concat()方法解总,連接兩個(gè)或更多的數(shù)組,并返回結(jié)果姐仅,a和b不變數(shù)據(jù)不變花枫。
var c = a.concat(b); //c=[1,2,3,4,5,6];
這里有一個(gè)問題,concat方法連接a掏膏、b兩個(gè)數(shù)組后劳翰,a、b兩個(gè)數(shù)組的數(shù)據(jù)不變馒疹,同時(shí)會(huì)返回一個(gè)新的數(shù)組佳簸。這樣當(dāng)我們需要進(jìn)行多次的數(shù)組合并時(shí),會(huì)造成很大的內(nèi)存浪費(fèi)颖变,如果是數(shù)據(jù)量比較小的時(shí)候生均,還可以勉強(qiáng)用,如果數(shù)據(jù)量大的時(shí)候腥刹,這個(gè)就不妥了马胧,所以這個(gè)方法肯定不是最好的。
第二種 for循環(huán)
遍歷其中一個(gè)數(shù)組衔峰,把該數(shù)組中的所有元素依次添加到另外一個(gè)數(shù)組中佩脊。直接上代碼:
for( var i in b){
??a.push(b[i]);
}
這樣的寫法可以解決第一種方案中對內(nèi)存的浪費(fèi),但是會(huì)有另一個(gè)問題:丑垫卤!這么說不是沒有道理威彰,如果能只用一行代碼就搞定,豈不快哉~
第三種?apply
函數(shù)的apply方法有一個(gè)特性穴肘,那就是func.apply(obj,argv)歇盼,argv是一個(gè)數(shù)組。所以我們可以利用這點(diǎn)梢褐,直上代碼:
a.push.apply(a,b);
調(diào)用a.push這個(gè)函數(shù)實(shí)例的apply方法旺遮,同時(shí)把,b當(dāng)作參數(shù)傳入盈咳,這樣a.push這個(gè)方法就會(huì)遍歷b數(shù)組的所有元素耿眉,達(dá)到合并的效果。
這里可能有點(diǎn)繞鱼响,我們可以把b看成[4,5,6]鸣剪,變成這樣:
a.push.apply(a,[4,5,6]);? ?等同于??a.push(4,5,6);
5. 數(shù)組去重
第一種? for循環(huán)?
創(chuàng)建一個(gè)新的空數(shù)組? ,用for循環(huán)遍歷進(jìn)去 同時(shí)查看一下是否有重復(fù)的? 如果是多數(shù)組 可以先合并!?鸷А债鸡!
var one=[];
for(var i =0 ; i<a.length ; i++){
if(one.indexOf(a[i])<0){? ?//查看當(dāng)前one數(shù)組里面有沒有a[i]? 沒有會(huì)返回-1? 有會(huì)返回當(dāng)前a[i]在one中的下標(biāo)
one.push(a[i])
}
}?
第二種? 先排序 然后用for循環(huán)進(jìn)行遍歷? ?運(yùn)用indexOf查看是否重復(fù)
6.把當(dāng)前數(shù)組累加 / 累乘 遞歸? ?reduce(arr);?? reduceRight()
reduce() 方法接收一個(gè)函數(shù)作為累加器,數(shù)組中的每個(gè)值(從左到右)開始縮減铛纬,最終計(jì)算為一個(gè)值厌均。
reduceRight()? 從數(shù)組的最后一項(xiàng)開始,向前遍歷到第一項(xiàng)
var a=[1,2,3,4,5];
function getSum(x, y) {
? ? return x+ y;? //+號可以換成*??
}
console.log(a.reduce(getSum))? ? //? +號下? 最后值為15? ?* 號下 最后值為120
7.數(shù)組排序??
sort() 在原數(shù)組上進(jìn)行排序? 可以從大到小? 或者 從小到大
var a = [6,4,2,8,22];
//小->大
a.sort(function(x,y){
? ? return x - y;
})??
console.log(a);? // [2, 4, 6, 8, 22]
? //大->小
a.sort(function(x,y){
? ? return y - x;
})
console.log(a);? ?// [22, 8, 6, 4, 2]
reverse()? ?把當(dāng)前數(shù)組顛倒順序
a.reverse()? // [22,8,2,4,6];
8.數(shù)組添加? ?(會(huì)改變原數(shù)組)
push()? ?在數(shù)組的末尾添加? 返回?cái)?shù)組的新長度
unshift? ?在數(shù)組的頭部添加? ? 返回?cái)?shù)組的新長度
?var a=[1,2,3,4];
console.log(a.push(125));? ? ? //? ?5
console.log(a.unshift(0));? ? ? ? //? 6
console.log(a.pop());? ? ? ? ? ? ? ? ?//125
console.log(a.shift());? ? ? ? ? ? ? ? ?//? 0
9.數(shù)組刪除
pop()? ?刪除數(shù)組末尾的數(shù) 并返回被刪除的數(shù)
shift()? ? 刪除數(shù)組開頭的數(shù) 并返回被刪除的數(shù)
10.every()和some()
every() 判斷數(shù)組中每一項(xiàng)都是否滿足條件告唆,只有所有項(xiàng)都滿足條件棺弊,才會(huì)返回true。類似&&
some() 判斷數(shù)組中是否存在滿足條件的項(xiàng)擒悬,只要有一項(xiàng)滿足條件模她,就會(huì)返回true。類似 ||
var arr = [1, 2, 3, 4, 5, 6];
arr.every(x=>x>0);//return true;
arr.every(x=>x>5);//return false;
arr.some(x=>x>5);//return true;