JS中數組和字符串的方法大全


  數組的方法很多,ECMScript5又提供了好幾種方法。有空把之前的雲上的筆記整理了一下,方便自己以后查找使用。

一、ECMScript 3的Array.prototype中定義的方法

1、join()
定義:將數組中所有的元素都轉化為字符串拼接在一起,返回最后生成的字符串。
注意:不改變原數組

var a = [1,2,3];
console.log(a.join());    //1,2,3 默認使用逗號分隔
console.log(a.join(""));  //123   轉化為字符串的常用方法
console.log(a.join("-")); //1-2-3 自定義分隔符
console.log(a);           //[1,2,3]  不修改原素組
var b = new Array(5);
console.log(b.join('*')); //****  4個連字號組成字符串

 

2、reverse()
定義:將數組中的元素顛倒順序,返回逆序的字符串。
注意:原數組被改變

var a2=[1,2,3];
console.log(a2.reverse());        //[3,2,1]
console.log(a2);                  //[3,2,1]原數組被修改
console.log(a2.reverse().join()); //1,2,3 因為原數組又被修改了

  

3、sort()
定義:將數組中的元素排序后返回排序后的數組、
注意:數組以字母表順序排。
原數組被改變
可以自定義按非字母的順序排序,只要個sort()傳入一個比較的匿名的比較函數可以了。
該比較函數決定了兩個參數的在排好數組中的先后順序,加入第一個參數在前,返回小於0的值,反之。相等為0。

    var a3=['c','b',undefined,'a','z'];
    console.log(a3.sort());    //["a", "b", "c", "z", undefined],undefined被排到最后
    console.log(a3);           //["a", "b", "c", "z", undefined]修改原數組  

    //自定義排序規則
    var a4 = [33,4,1111,2222];
    //console.log(a4.sort());  //[1111, 2222, 33, 4] 默認排序
    a4.sort(function(a,b){
    	return a-b;            
    });
    console.log(a4);           //[4, 33, 1111, 2222]

  

4、concat()
定義:創建並返回一個新數組。新數組由原數組和concat()里面的參數組成
注意:不改變原數組
只能扁平化一維數組,高維不行(不會遞歸扁平化數組),高維數組(扁平化)降維可以看。扁平化多維數組

    var a5 = [1,2,3];
    console.log(a5.concat(4));            //[1,2,3,4]
    console.log(a5);                      //[1,2,3]  //原數組不改變
    console.log(a5.concat([4,5]));        //[1, 2, 3, 4, 5]
    console.log(a5.concat([4,5,[6,7]]));  //[1, 2, 3, 4, 5,[6,7]] //只能扁平化一維

  

5、slice()
定義:返回指定數組的片段或者子數組,兩個參數分別指是片段的開始和結束位置(不包含結束的位置)。
注意:不改變原數組
如果沒有參數,相當於生成一原數組的副本
生成的新數組不包含結束位置的元素
說明:字符串也可以使用這個方法 ,如"[Object Array]".slice(8,-1); =>Array

   var a6 = [1,2,3,4,5];
   console.log(a6.slice(1,3));   //[2,3]  //索引從1到3但包括3的子數組
   console.log(a6);              //[1,2,3,4,5]  //原數組不改變
   console.log(a6.slice(1));     //[2,3,4,5] 只有一個參數,則從該參數位置到末尾
   console.log(a6.slice(1,-1));  //[2,3,4] 參數為-1只向最后一個元素,但不包括它
   console.log(a6.slice(-2,-1))  //[4] 從倒數第2個數到倒數第一個數,但不包括倒數第一個數

  

6、splice()
定義:在數組中輸入和刪除元素的通用方法。返回的是由刪除元素組成的新數組,沒有刪就返回空數組[]
前兩個參數是指定需要刪除的元素,后面的任意個數的參數是需要插入到原數組的元素
注意:原數組被改變

   var a7 = [1,2,3,4,5];
   b7 = a7.splice(2); 
   console.log(b7);      //[3,4,5]   返回原數組從索引為2的元素到結尾被刪除的部分
   console.log(a7);      //[1,2]     原數組是被修改之后的數組
   
   b7 = a7.splice(1,2); 
   b7 = a7.splice(1,1);  // 從索引為1的元素開始刪除1個元素   
   console.log(b7);      //[2,3]   從索引為1的元素開始刪除2個元素,也就是2和3
   console.log(a7);      //[1,4,5] 原數組是被刪除之后剩余的數組
 
   var b7 = a7.splice(1,0,100); 
   console.log(b7);      //[] 因為沒有刪除元素,所有返回的是一個空數組
   console.log(a7);      //[1, 100, 2, 3, 4, 5] 從索引為1的元素開始,刪除0個元素,之后原索引為1的位置插入新元素

  

7、push()和pop()
定義:push在數組的末尾添加一個或者多個元素,返回新數組的長度。所以不能鏈式操作
pop刪除數組的最后一個元素,返回它刪除的值元素

組合使用push()和pop()可以實現先進后出的棧

var a8 = [1,2,3];
var b8 = a8.push(4,5);
console.log(b8);   //5  返回的是新數組的長度。
console.log(a8);   //[1,2,3,4,5] 直接原數組尾部添加4
   
var a9 = [1,2,3];
var b9 = a9.pop();
console.log(b9);   //3  返回的刪除的元素。
console.log(a9);   //[1,2] 直接在原數組上刪除元素3
//棧
var stack = []; stack.push(1,2,3); console.log(stack); //[1,2,3] stack.pop(); console.log(stack); //[1,2] stack.push(100) console.log(stack); //[1, 2, 100] stack.pop() console.log(stack); //[1, 2]

  

8、unshift()和shift()
定義:unshift是在數組頭部添加一個或多個元素。如果一次性傳入多個參數,多個參數按照按照原先的位置直接加到數
組中。返回新數組的新數組的長度。
shift:刪除數組的第一個元素,並返回刪除的元素

//組合使用push()和()可以實現先進先出的隊列
var queue = []; queue.push(1,2,3); console.log(queue); //[1,2,3] queue.shift(); console.log(queue); //[2,3] queue.push(100) console.log(queue); //[2, 3, 100] queue.shift(); console.log(queue); //[3,100] queue.shift(); console.log(queue); //[100]

  


9、toString()
定義:將數組數組中的每個元素轉化為字符串。 輸出用逗號分隔的字符串列表(可能數組的內部元素(數組)還會再次調
用toString(),高維數組扁平化正是利用這點)
注意:與不使用任何參數調用的jion()方法返回的字符串一樣。

var a10 = [1,2,3];
var a11 = [1,2,[3,4,[5,6]]];
console.log(a10.toString());  //1,2,3
console.log(a10);             //原數組         
console.log(a11.toString());  //1,2,3,4,6
console.log(a11);             //原數組

  


二、ECMScript 5中的數組方法


1、forEach()  //遍歷
定義:該方法從頭到尾遍歷數組,為某個元素調用指定的函數。傳遞函數包括三個參數(數組元素、元素索引、數組本身
),如果只關心數組元素的值,可以只傳一個參數。
注意:無法在所有元素的都傳遞給調用函數之前提前結束。也就是沒有像for中一樣的break語句。如果要提交終止,可以
把forEach()方法放到try塊中。如果forEach()調用的函數拋出forEach.break異常,循環提前結束

var data = [1,2,3];
var sum = 0;
data.forEach(function(value){
  sum+=value;
});
console.log(sum);  //6

var data = [10,20,30];
data.forEach(function(v,i,a){
  a[i] = v*2;
});
console.log(data) //[20, 40, 60]

  

2、map()     //映射
定義:將調用的數組的每個元素傳遞給指定的函數,並返回一個新數組,它包含該該函數的返回值
注意:傳遞給map的函數應該有返回值,返回的是新數組,不修改調用的數組。

var data3 = [1,2,3];
var b = data3.map(function(val){
   return   val*10;
});
console.log(data3);  //[1,2,3]     不改變原數組
console.log(b);      //[10,20,30]  新數組

  

3、filter() //過濾
定義:返回的數組元素是調用的數組的一個子集,就傳遞的函數是用來做邏輯判定的,返回true,傳給給判定函數的元素就是這個子集的成員。

var data4 = [1,2,3,4,5];
var b2 = data4.filter(function(val){
  return val<3;
});
console.log(b2);     //[1,2]
console.log(data4);  //[1,2,3,4,5] 不改變原數組   

var b3 = data4.filter(function(val,i){
  return i%2;
});
console.log(b3);     //[2,4] 返回索引為奇數的元素組成的數組


4、every() 和some()
這兩種方法是數組的邏輯判定,他們針對數組中的所有元素應用指定的函數進行判定。返回true或者false
定義:every 當且僅針對數組中的所有元素調用判定的函數都返回true,它才返回true
some 至少有一個判定為true就返回true.

 

5、reduce()
定義:使用指定的函數將數組元素進行組合,生成一個單值。參數一是執行簡化操作的函數,參數二是傳給簡化函數的初始值。

注意:一旦確認之后,就停止遍歷數組了。

var data5 = [1,2,3];
var sum = data5.reduce(function(x,y){
  return  x+y;
},0);
console.log(sum);  //6

var product = data5.reduce(function(x,y){
  return  x*y;
},100);
console.log(product);  //600 

 

6、indexOf()和lastIndexOf()
定義:搜索整個數組中具有給定值的位子,返回找到第一個元素的索引,如果沒有找到就返回-1;indexOf()是從頭找到尾,lastIndexOf()正好相反
注意:不接受函數作為參數,第一個參數是需要搜索的值,第二個參數是可選的,表示從哪里搜索,可以是負數,表示相對數組末尾的偏移量。
說明:字符串也有這兩個方法,功能類似。

var data6 = [1,2,3,3,4,3,5];
console.log(data6.indexOf(3)); //2 第一個3的索引是2

  

7、isArray()
定義:判斷對象是不是數組

 

三、作為數組的字符串

1、簡單的使用

var str = "test"
str.charAt(1) //e
str[1] //e

  

2、可以調用數組的方法

注意:字符串是不可變的值,當成數組看待是只可讀的。所以像push() sort() reverse() splice()等會修改原數組的方法,在字符串上是無效的。錯誤可能都沒有提示!

var str = "hello";
Array.prototype.join.call(str," "); //"h e l l o"

Array.prototype.filter.call(str, function(x){
  return x.match(/o/g);             //["o"]
});

  

 

String 對象方法

常用的:

chatAt()

indexOf()

match()

replace()

slice() //數組也是

split() //數組也是     split(/\s+/) 按中間一個或多個空字符串分隔成數組,如獲取字符串中的單詞

substr()

substring()

方法 描述
anchor() 創建 HTML 錨。
big() 用大號字體顯示字符串。
blink() 顯示閃動字符串。
bold() 使用粗體顯示字符串。
charAt() 返回在指定位置的字符。
charCodeAt() 返回在指定的位置的字符的 Unicode 編碼。
concat() 連接字符串。
fixed() 以打字機文本顯示字符串。
fontcolor() 使用指定的顏色來顯示字符串。
fontsize() 使用指定的尺寸來顯示字符串。
fromCharCode() 從字符編碼創建一個字符串。
indexOf() 檢索字符串。
italics() 使用斜體顯示字符串。
lastIndexOf() 從后向前搜索字符串。
link() 將字符串顯示為鏈接。
localeCompare() 用本地特定的順序來比較兩個字符串。
match() 找到一個或多個正則表達式的匹配。
replace() 替換與正則表達式匹配的子串。
search() 檢索與正則表達式相匹配的值。
slice() 提取字符串的片斷,並在新的字符串中返回被提取的部分。
small() 使用小字號來顯示字符串。
split() 把字符串分割為字符串數組。
strike() 使用刪除線來顯示字符串。
sub() 把字符串顯示為下標。
substr() 從起始索引號提取字符串中指定數目的字符。
substring() 提取字符串中兩個指定的索引號之間的字符。
sup() 把字符串顯示為上標。
toLocaleLowerCase() 把字符串轉換為小寫。
toLocaleUpperCase() 把字符串轉換為大寫。
toLowerCase() 把字符串轉換為小寫。
toUpperCase() 把字符串轉換為大寫。
toSource() 代表對象的源代碼。
toString() 返回字符串。
valueOf() 返回某個字符串對象的原始值。

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM