1. 程式人生 > >JS陣列(Arry)應用大全

JS陣列(Arry)應用大全

一、生成陣列 1、使用Array建構函式: var arr = new Array(10); //建立一個包含10項的陣列

2、使用陣列字面量表示法: var arr1 = [10]; // console.log(arr) //[] // console.log(arr1) //[10]

二、陣列方法

var arr2 = ['nice', 'hello', 'good', 'hi'];
var arr3 = [100, 21, 3, 14, 85, 36];
var arr4 = ['a', 'b', 'c', 'd', 'e', 'f']

1、join() // join(separator): 將陣列的元素組起一個字串,以separator為分隔符,省略的話則用預設用’逗號’為分隔符,該方法只接收一個引數:即分隔符。

var arr5 = arr2.join("-");
console.log(arr5)    //nice-hello-good-hi

var arr6 = arr3.join("-");
console.log(arr6)     //1-2-3-4-5-6

//此方法不改變原陣列,只是將陣列轉變為字串輸出。

//通過join()方法可以實現重複字串,只需傳入字串以及重複的次數,就能返回重複後的字串,函式如下:

 function repeatString(str,n) {    //repeatString(字串,重複次數)
              return new Array(n+1
).join(str); } console.log(repeatString("abc",3)); // abcabcabc console.log(repeatString("Hi",5)); //HiHiHiHiHi

2、push()和pop() //push(): 可以接收任意數量的引數,把它們逐個新增到陣列末尾,並返回修改後陣列的長度,原陣列發生改變。 //pop():陣列末尾移除最後一項,減少陣列的 length值,然後返回移除的項,原陣列發生改變。

var len1 = arr2.push("haha")
console.log
(arr2) //['nice', 'hello', 'good', 'hi', "haha"] console.log(len1) //5 var len2 = arr2.push(...arr4) console.log(arr2) //['nice', 'hello', 'good', 'hi', "haha", "a", "b", "c", "d", "e", "f"] console.log(len2) //11

//返回尾部新增後的新陣列長度,原陣列發生改變

var arr2 = ['nice', 'hello', 'good', 'hi'];
 var str1 = arr2.pop()
 console.log(arr2)    //['nice', 'hello', 'good']
 console.log(str1)   //hi   
 console.log(arr2.length)    //3

// 返回尾部被刪除的元素,原陣列發生改變

3、unshift() 和 shift() //unshift:將引數新增到原陣列開頭,並返回陣列的長度 。 //shift():刪除原陣列第一項,並返回刪除元素的值;如果陣列為空則返回undefined 。 //這組方法和上面的push()和pop()方法正好對應,一個是運算元組的開頭,一個是運算元組的結尾。

var len3 = arr2.unshift(10)
var len4 = arr2.unshift(...['a','b','c'])
 console.log(len3)   //5
 console.log(len4)   //8
 console.log(arr2)    //["a", "b", "c", 10, 'nice', 'hello', 'good', 'hi']

//返回頭部新增後的新陣列長度,原陣列發生改變

var str2 = arr2.shift()
console.log(str2)    //a
console.log(arr2)    //["b", "c", 10, 'nice', 'hello', 'good', 'hi']

//返回頭部被刪除的元素,原陣列發生改變

4、//sort():按升序排列陣列項—-即最小的值位於最前面,最大的值排在最後面(比較的是ASCII碼錶的值)。 //在排序時,sort()方法會呼叫每個陣列項的 toString()轉型方法,然後比較得到的字串,以確定如何排序。即使陣列中的每一項都是數值, sort()方法比較的也是字串,因此會出現以下的這種情況:

 var arr7 = arr2.sort()
 var arr8 = arr3.sort()
  console.log(arr2)        //["good", "hello", "hi", "nice"]
  console.log(arr3)        //[100, 14, 21, 3, 36, 85]
  console.log(arr7)        //["good", "hello", "hi", "nice"]
   console.log(arr8)        //[100, 14, 21, 3, 36, 85]

//返回被sort後的新的陣列,原陣列也隨之改變

//為了解決上述問題,sort()方法可以接收一個比較函式作為引數,以便我們指定哪個值位於哪個值的前面。比較函式接收兩個引數,如果第一個引數應該位於第二個之前則返回一個負數,如果兩個引數相等則返回 0,如果第一個引數應該位於第二個之後則返回一個正數。以下就是一個簡單的比較函式:

     function compare(a,b){
                    if(a>b){return 1}
                    else if(a<b){return -1}
                    else {return 0}
                }
                function sort(a,b){
                    return a-b;
                }
 var arr9 = arr2.sort(sort)
 var arr10 = arr3.sort(sort)
 console.log(arr2)        //["good", "hello", "hi", "nice"]
 console.log(arr3)        //[3, 14, 21, 36, 85, 100]
 console.log(arr9)        //["good", "hello", "hi", "nice"]
 console.log(arr10)        //[3, 14, 21, 36, 85, 100]

//返回被sort後的新的陣列,原陣列也隨之改變

5、reverse() //reverse():反轉陣列項的順序。

 var arr11 = arr2.reverse()
 console.log(arr2)        //["hi", "good", "hello", "nice"]
 console.log(arr11)        //["hi", "good", "hello", "nice"]

//返回reverse之後的新陣列,原陣列隨之改變

//反轉字串的方法

    function reverseString(str){
                    return str.split(" ").reverse().join(" ");
                }
// console.log(reverseString("hello World !"))   //! World hello

6、concat() //concat() :將引數新增到原陣列中。這個方法會先建立當前陣列一個副本,然後將接收到的引數新增到這個副本的末尾,最後返回新構建的陣列。在沒有給 concat()方法傳遞引數的情況下,它只是複製當前陣列並返回副本。

 var arr12 = arr2.concat("bye",arr3)
  console.log(arr2)        //["nice", "hello", "good", "hi"]
  console.log(arr3)        //[100, 21, 3, 14, 85, 36]
  console.log(arr12)        //["nice", "hello", "good", "hi", "bye", 100, 21, 3, 14, 85, 36]

//從上面測試結果可以發現:傳入的不是陣列,則直接把引數新增到陣列後面,如果傳入的是陣列,則將陣列中的各個項新增到陣列中。 //不改變原陣列 //但是如果傳入的是一個二維陣列呢?

 var arr13 = arr2.concat("tom",["hh",["ad","hp"]])
 console.log(arr2)        //["nice", "hello", "good", "hi"]
 console.log(arr13)        //["nice", "hello", "good", "hi", "tom", "hh", Array[2]]
 console.log(arr13[6])    //["ad", "hp"]

//不會展開二維陣列的每一項

7、slice() //slice():返回從原陣列中指定開始下標到結束下標之間的項組成的新陣列。slice()方法可以接受一或兩個引數,即要返回項的起始和結束位置。在只有一個引數的情況下, slice()方法返回從該引數指定位置開始到當前陣列末尾的所有項。如果有兩個引數,該方法返回起始和結束位置之間的項——但不包括結束位置的項。

var arr14 = arr3.slice(1)
var arr15 = arr3.slice(1,5)
 var arr16 = arr3.slice(2,-3)
 var arr17 = arr3.slice(-6,-3)
 console.log(arr3)    //[100, 21, 3, 14, 85, 36]
 console.log(arr14)    //[21, 3, 14, 85, 36]
 console.log(arr15)    //[21, 3, 14, 85]
console.log(arr16)    //[3]
console.log(arr17)    //[100, 21, 3]

//返回從原陣列中指定開始下標到結束下標(被擷取)之間的項組成的新陣列。原陣列不會發生改變。當引數出現負數時,將負數加上原陣列長度的值(6)來替換該位置的數即可。

8、splice() //splice():很強大的陣列方法,它有很多種用法,可以實現刪除、插入和替換。 //注意:該方法會改變原始陣列。 //arrayObject.splice(index,howmany,item1,…..,itemX) /* 引數1: 必需。整數,規定新增/刪除專案的位置,使用負數可從陣列結尾處規定位置。 index,陣列的索引值 * 引數2: 必需。要刪除的專案數量。如果設定為 0,則不會刪除專案。 * 引數3: 可選。向陣列新增的新專案。 * */

 var arr18= arr2.splice(1,3)       //在['nice', 'hello', 'good', 'hi']陣列index1後做刪除['hello', 'good', 'hi']操作。(相當於刪除)
console.log(arr2)    //["nice"]
console.log(arr18)    //["hello", "good", "hi"]
var arr19= arr2.splice(1,0,"ph","hty")            //在["nice"]陣列index1後做新增["ph","hty"]操作。(相當於新增)
console.log(arr2)    //["nice", "ph", "hty"]
console.log(arr19)    //[]
 var arr20 = arr2.splice(1,2,"ph","hty","fd")     //在["nice", "ph", "hty"]陣列index1後做刪除["ph","hty"],然後再新增  ["ph", "hty", "fd"]操作。(相當於替換)
console.log(arr2)    //["nice", "ph", "hty", "fd"]
console.log(arr20)    //["ph", "hty"]

//返回被刪除的陣列,如果沒有刪除項,則返回空陣列[],原陣列發生相應的改變。

9、indexOf()和 lastIndexOf() //indexOf():接收兩個引數:要查詢的項和(可選的)表示查詢起點位置的索引。其中, 從陣列的開頭(位置 0)開始向後查詢。 //lastIndexOf:接收兩個引數:要查詢的項和(可選的)表示查詢起點位置的索引。其中, 從陣列的末尾開始向前查詢。 //這兩個方法都返回要查詢的項在陣列中的位置,或者在沒找到的情況下返回-1。在比較第一個引數與陣列中的每一項時,會使用全等操作符。 // index: 0 1 2 3 4 5 6 7 8 9 10 //var arr21 = [1,3,5,5,7,7,5,5,5,3,1]; // console.log(arr21.indexOf(5)); //2 // console.log(arr21.lastIndexOf(5)); //8 // console.log(arr21.indexOf(5,4)); //6 //註釋:從index4的位置(即陣列第一個7)開始往陣列後查詢5所在本陣列的index首次出現的位置,即index6所在的位置5 //console.log(arr21.lastIndexOf(5,5)); //3 //註釋:從index5的位置(即陣列第二個7)開始往陣列前查詢5所在本陣列的index首次出現的位置,即index3所在的位置5 // console.log(arr21.indexOf(“5”)); //-1 //返回被查詢項的位置索引,如果找不到就返回-1。 //注意:索引是從正數第一個(index0)開始,不存在逆向

10、forEach() //forEach():對陣列進行遍歷迴圈,對陣列中的每一項執行給定函式。這個方法沒有返回值。引數都是function型別,預設有傳參 //arr.forEach(function(item,index,items){}) /*引數1:遍歷的陣列內容item * 引數2:對應的陣列索引 index * 引數3:陣列本身items */ /*var arr22= [1, 2, 3, 4, 5]; arr22.forEach(function(x,index,a){ console.log(x + ‘|’ + index + ‘|’ + (a === arr22)); });*/ //1|0|true //2|1|true //3|2|true //4|3|true //5|4|true

11、map():指“對映”,對陣列中的每一項執行給定函式,返回每次函式呼叫的結果組成的陣列。 //map() 把每個元素通過函式傳遞到當前匹配集合中,生成包含返回值的新的 jQuery 物件。 //.map(callback(index,domElement)) //由於返回值是 jQuery 封裝的陣列,使用 get() 來處理返回的物件以得到基礎的陣列。 /*var arr23 = [1, 2, 3, 4, 5]; var arr24 = arr23.map(function(item){ console.log(item) return item*item })*/ //console.log(arr23) //[1, 2, 3, 4, 5] //console.log(arr24) //[1, 4, 9, 16, 25]

12、filter() //filter(fn(item,index){}):“過濾”功能,陣列中的每一項執行給定函式,返回滿足過濾條件組成的陣列。

               /*var arr25 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
                var arr26 = arr25.filter(function(x,index) {
                    return index % 3 === 0 || x >= 8;
                });*/
//console.log(arr26);        //[1, 4, 7, 8, 9, 10]

13、every() //every():判斷陣列中每一項都是否滿足條件,只有所有項都滿足條件,才會返回true。 /*var arr27 = [1, 2, 3, 4, 5]; var arr28 = arr27.every(function(x){ return x < 10; });*/ //console.log(arr28) //true

14、some() //some():判斷陣列中是否存在滿足條件的項,只要有一項滿足條件,就會返回true。 /*var arr29 = [1, 2, 3, 4, 5]; var arr30 = arr29.some(function(x){ return x < 2; });*/ // console.log(arr30) //true

15、reduce()和 reduceRight() //這兩個方法都會實現迭代陣列的所有項,然後構建一個最終返回的值。reduce()方法從陣列的第一項開始,逐個遍歷到最後。而 reduceRight()則從陣列的最後一項開始,向前遍歷到第一項。 //這兩個方法都接收兩個引數:一個在每一項上呼叫的函式和(可選的)作為歸併基礎的初始值。 //傳給 reduce()和 reduceRight()的函式接收 4 個引數:前一個值、當前值、項的索引和陣列物件。這個函式返回的任何值都會作為第一個引數自動傳給下一項。第一次迭代發生在陣列的第二項上,因此第一個引數是陣列的第一項,第二個引數就是陣列的第二項。 /*var arr31 = [1,2,3,4,5]; var arr32 = arr31.reduce(function(pre,cur,index,items){ console.log(pre) console.log(cur) console.log(items) console.log(index) return pre * cur; },10)*/ //console.log(arr32);