js陣列常用方法總結

李夏洛發表於2020-12-28

少看微博,多看部落格!

一、首先建立陣列

1.使用建構函式:

var arr = new Array();
var arr = new Array("a","b");

2.直接定義

var arr = ["a","b"];

二、常用方法

常用方法大概以下幾種:splice(),slice(),join(),push(),pop(),shift() ,unshift(),sort(),reverse(),concat(),indexOf(), lastIndexOf() ,forEach() ,map() ,filter(),every() ,some() ,reduce()和 reduceRight()

1.最近用的比較多的就是splice(),對陣列進行插入,刪除或者替換。原來的陣列會被改變!

語法:arr.splice(index,n,item)

index: 必需,整數,規定新增/刪除專案的位置。如果是負數,那麼它規定從陣列尾部開始算起的位置。也就是說,-1 指最後一個元素,-2 指倒數第二個元素,以此類推。

n: 必需。要刪除的專案數量。如果設定為 0,則不會刪除專案。

item: 可選,向陣列新增的新專案

  • 插入元素:
  • var arr = ["a","b","c","d","e","f","g"];
  • 在c之前插入三個元素:
  • arr.splice(2,0,"1","2","3");
  • 此時陣列 arr: [“a”, “b”, “1”, “2”, “3”, “c”, “d”, “e”, “f”, “g”];

  • 刪除元素:
  • 想把arr=[“a”, “b”, “1”, “2”, “3”, “c”, “d”, “e”, “f”, “g”]; e後面的元素都刪除,
  • arr.splice(7,3)
  • 此時:arr: [“a”, “b”, “1”, “2”, “3”, “c”, “d”];

  • 替換元素:
  • 比如把cd 替換成4,5,6如下:
  • arr.splice(5,2,"4","5","6")
  • 此時:陣列arr :[“a”, “b”, “1”, “2”, “3”, “4”, “5”, “6”];

2. slice() 方法在陣列中讀取元素,不會改變原始陣列

語法:arr.slice(start, end);

start:可選,開始位置;end:可選,終止位置.

var arr=["a", "b", "c", "d", "e", "f", "g"];
arr.slice(1,3);
//返回 ["b", "c"];
arr.slice(-3-1)//返回 ["e", "f"]

3.join() 方法用於把陣列中的所有元素放入一個字串。元素是通過指定的分隔符進行分隔的。

arr.join(separator);

separator: 可選。分隔符,不寫的話預設是逗號。

var arr=["a", "b", "c", "d", "e", "f", "g"];
arr.join();
//返回"a,b,c,d,e,f,g"
arr.join(";");
//返回"a;b;c;d;e;f;g"

4.push(),pop 和unshift()、shift()**

這兩組同為對陣列的操作,並且會改變陣列的本身的長度及內容。

不同的是 push()、pop() 是從陣列的尾部進行增減,unshift()、shift() 是從陣列的頭部進行增減。
//原陣列長度為7
var arr=["a", "b", "c", "d", "e", "f", "g"];
arr.push("hi");
//返回 8
//此時 arr :["a", "b", "c", "d", "e", "f", "g", "hi"]
arr.pop()
//返回 "hi"
arr.push("j","k","l");
//返回 10
//此時 arr :["a", "b", "c", "d", "e", "f", "g", "j", "k", "l"]

可以看出,push,pop是從陣列的尾部進行增減,且
push()向陣列的 尾部 新增若干元素,並返回陣列的新長度;
pop()從陣列的 尾部刪除1個元素(刪且只刪除1個),並返回被刪除的元素;空陣列是繼續刪除,不報錯,但返回undefined;

//原陣列長度為7
var arr=["a", "b", "c", "d", "e", "f", "g"];
arr.unshift("1","2");
//返回 9
//此時 arr :["1", "2", "a", "b", "c", "d", "e", "f", "g"]
arr.shift();
//返回 "1"
//此時 arr :["2", "a", "b", "c", "d", "e", "f", "g"]

unshift() shift() ,分別是從頭部增加,刪除元素,且unshift()向陣列的 頭部 新增若干元素,並返回陣列的新長度;
shift()從陣列的 頭部刪除1個元素(刪且只刪除1個),並返回被刪除的元素;

5.concat()

concat() 方法用於連線兩個或多個陣列.返回一個新的陣列。該方法不會改變現有的陣列

var a=["a","b"];
var b=["c","d"];
var ab=a.concat(b);
//ab: ["a", "b", "c", "d"]
//a: ["a", "b"]
//b: ["c", "d"]

concat()和push區別在於concat()是先把原陣列複製到一個新的陣列,然後在新陣列上進行操作。不會改變原有陣列

6.sort() :用於對陣列的元素進行排序。

語法:arrayObject.sort(sortby),sortby 必須是函式,規定排序順序。
返回值:對陣列的引用。陣列在原陣列上進行排序,不生成副本。即該方法會改變原陣列。

(a-b輸出從小到大排序,b-a輸出從大到小排序);

$scope.mysortNum = function(a,b){
        return a - b
    }
    $scope.sortNum = function(){
        var a=["1","100","38","45","25","66"];
        a.sort($scope.mysortNum);
        document.write(a);
  //輸出["1", "25", "38", "45", "66", "100"]
 }
$scope.mysortNum = function(a,b){
        return b - a
    }
 
    $scope.sortNum = function(){
        var a=["1","100","38","45","25","66"];
        a.sort($scope.mysortNum);
        document.write(a);
     //輸出["100", "66", "45", "38", "25", "1"]
    }
 $scope.sortNum();

7. reverse() 用於顛倒陣列中元素的順序,會改變原來的陣列,而不會建立新的陣列。

var a=["a","b","c"]
a.reverse()
//返回結果 ["c", "b", "a"]
//返回結果 a: ["c", "b", "a"]

8. indexOf(item,start) 返回某個指定的字串值在陣列中-首-次出現的位置。

item: 必須。查詢的元素。
start : 可選的整數引數。規定在字串中開始檢索的位置。它的合法取值是 0 到arr.length - 1。如省略該引數,則將從字元 串的首字元開始檢索。
lastIndexOf : 返回字串最後出現的位置。

var a=["a","b","c","a","mm","1"]
a.indexOf("a")
//返回 0
a.indexOf("c")
//返回2
a.lastIndexOf("a")
//返回3
a.indexOf("1")
//返回5
a.indexOf(1)
//返回-1

9. forEach()

[].forEach(function(value, index, array) {
  // ...
});

10. map() 通過指定函式處理陣列的每個元素,並返回處理後的陣列.map() 不會改變原始陣列。

$scope.mapNum = function(){
        var b=[0,2,4,6,8];
        var c= b.map(function (val,index,arr) {
            return val / 2;
        },this);
        console.log(b);//返回 [0, 2, 4, 6, 8]
        console.log(c);//返回 [0, 1, 2, 3, 4]
        }
        
$scope.mapNum(); 

forEach和map() 的區別在於,forEach() 沒有返回值。map 有返回值,可以return 出來。

11. filter() 檢測數值元素,並返回符合條件所有元素的陣列。 filter() 不會改變原始陣列。

every() 檢測數值元素的每個元素是否都符合條件。返回true/false。 every() 不會改變原始陣列。

 如果陣列中檢測到有一個元素不滿足,則整個表示式返回 false ,且剩餘的元素不會再進行檢測。

 如果所有元素都滿足條件,則返回 true。

 some() 方法用於檢測陣列中的元素是否滿足指定條件。返回true/false。some() 不會改變原始陣列。

  如果有一個元素滿足條件,則表示式返回true , 剩餘的元素不會再執行檢測。

  如果沒有滿足條件的元素,則返回false。
$scope.forNum = function(){
        var b=[0,2,9,6,10,1,66,12];
        var a = b.filter(function (val,index,arr) {
             return val >10;
        },this);
        console.log(a);
        //輸出: [66, 12]
 
        var A = b.every(function (val,index,arr) {
            return val >10;
        },this);
        console.log(A);
    //輸出:false
 
      var B = b.some(function (val,index,arr) { 
           return val >10;       
       },this);        
       console.log(B); 
      //輸出:true
  }
   $scope.forNum();

12. reduce()和 reduceRight()

reduce() : 將陣列元素計算為一個值(從左到右)。
reduceRight(): 將陣列元素計算為一個值(從右到左)。

語法:

array.reduce(function(preValue, currentValue, currentIndex, arr){
}, initialValue)

function(preValue,currentValue, index,arr) :必需。用於執行每個陣列元素的函式。

preValue: 必需。初始值, 或者計算結束後的返回值。如果向 reduce 方法提供 initialValue,則在首次呼叫函式時,previousValue 為 initialValue。

currentValue: 必需。當前元素

currentIndex: 可選。當前元素的索引

arr: 可選。當前元素所屬的陣列物件。

initialValue:可選。傳遞給函式的初始值

$scope.forNum = function(){
        var arr = [0,1,2,3,4];
        var sum= arr.reduce(function (preValue,curValue,index,array) {
            console.log(preValue,curValue);
            return preValue + curValue;
        }); // 10
        console.log(sum);
             //輸出log分別為:1 2,3 3,6 4,10
 }
 $scope.forNum(); 
   $scope.forNum = function(){
    var arr = [0,1,2,3,4];
    var sum= arr.reduce(function (preValue,curValue,index,array) {
        console.log(preValue,curValue);
        return preValue + curValue;
    },10); // 20
    console.log(sum);
   //輸出分別為:10 0,10 1,11 2,13 3,16 4,20
 }
$scope.forNum();
 $scope.forNum = function(){
        var arr = [0,1,2,3,4];
        var sum= arr.reduceRight(function (preValue,curValue,index,array) {
            console.log(preValue,curValue);
            return preValue + curValue;
        }); // 10
        console.log(sum);
        //輸出分別為:4 3,7 2,9 1,10 0,10
    }
    $scope.forNum();

相關文章