JavaScript 常用數(shù)組操作方法

  • 一、不改變原數(shù)組:concat()、join()、slice()、toString()、valueOf()substring()substr();另加split()、replace()

    • 1、concat() 方法用于連接兩個或多個數(shù)組。僅會返回被連接數(shù)組的一個副本。

      var arr1 = [1, 2, 3];
      var arr2 = [4, 5];
      var arr3 = arr1.concat(arr2);
      console.log(arr1);  // [1, 2, 3]
      console.log(arr3);  // [1, 2, 3, 4, 5]
      
    • 2、join()方法用于把數(shù)組中的所有元素放入一個字符串中。

      var arr = [1, 2, 3];
      console.log(arr.join());    // 1, 2, 3
      console.log(arr);   // [1, 2, 3]
      
    • 3、slice(start,end) 方法從已有的數(shù)組中返回選定的元素。返回一個新數(shù)組。包含start到end(不包含end)的arratObject中的元素

      var a = ['a', 'b', 'c', 'd', 'e', 'f'];
      var a1 = a.slice(2,4);
      console.log(a);     // ["a", "b", "c", "d", "e", "f"]
      console.log(a1);    // ["c", "d"]
      
    • 4、toString()返回一個字符串,表示指定的數(shù)組及其元素

      var arr = ['a', 'b', 'c', 'd'];
      console.log(arr.toString());    // a,b,c,d
      console.log(arr);   // ["a", "b", "c", "d"]
      
    • 5、substring()substr() 都不改變原數(shù)組
      相同點(diǎn):都只寫一個參數(shù)時,兩者的作用:都是截取字符串從當(dāng)前下標(biāo)以后直到字符串最后的字符串片段。
      不同點(diǎn):第二個參數(shù)。
      ? substr(startIndex,lenth): 第二個參數(shù)是截取字符串的長度(從起始點(diǎn)截取某個長度的字符串);
      ? substring(startIndex, endIndex): 第二個參數(shù)是截取字符串最終的下標(biāo) (截取2個位置之間的字符串,‘含頭不含尾’);

      var str = '123456789';
      console.log(str.substr(2))      // 3456789
      console.log(str.substring(2))   // 3456789
      
      console.log(str.substr(2, 4))       // 3456
      console.log(str.substring(2, 4))    // 34
      
    • 6、split()用于把一個字符串分割成字符串?dāng)?shù)組

      var arr = 'a, b, c, d, 1, 2, 3';
      var arr1 = arr.split(arr)
      console.log(arr)    // a, b, c, d, 1, 2, 3
      console.log(arr1)   // ["a, b, c, d, 1, 2, 3"]
      
    • 7、replace()用于在字符串中用一些字符替換另一些字符,或替換一個與正則表達(dá)式匹配的子串。

      var arr = "a, b, c, 1, 2, 3";
      var arr1 = arr.replace('b', 'G');
      console.log(arr)    // a, b, c, 1, 2, 3
      console.log(arr1)   // a, G, c, 1, 2, 3
      
  • 二、會改變原數(shù)組:push()、unshift()pop()shift()、splice()reverse()、sort()排序

    • 1、push()方法可向數(shù)組的末尾添加一個或多個元素,并返回新的長度。

      var arr = [1, 2, 3];
      var arr1 = arr.push(5);
      console.log(arr);           // [1, 2, 3, 5]
      console.log(arr1);  // 4
      
    • 2、unshift()方法向數(shù)組的開頭添加一個或多個元素,并返回新的長度。(該方法可以不傳參數(shù),不傳參數(shù)就是不增加元素)

      var arr = [1, 2, 3, 4, 5];
      console.log(arr.unshift(8, 9)); // 7
      console.log(arr);   // [8, 9, 1, 2, 3, 4, 5]
      
    • 3、pop()方法用于刪除數(shù)組的最后一個元素,并返回該元素的值

      var arr = [1, 2, 3];
      console.log(arr.pop()); // 3
      console.log(arr);   // [1, 2]
      
    • 4、shift()方法用于刪除數(shù)組的第一個元素,并返回第一個元素的值。

      var arr = [1, 2, 3];
      console.log(arr.shift());   // 1
      console.log(arr);   // [2,3]
      
    • 5、splice()方法通過刪除或替換現(xiàn)有元素或者原地添加新的元素,來修改數(shù)組,并以數(shù)組形式返回被修改的內(nèi)容。沒有刪除元素,則返回空數(shù)組

      //從第 2 位開始刪除 0 個元素,插入"FF"\"GG"
      var a = ['a', 'b', 'c', 'd']
      var a1 = a.splice(2, 0, 'GG', 'FF')
      console.log(a)      // ["a", "b", "GG", "FF", "c", "d"]
      console.log(a1)     // []
      
      // 從第 2 位開始刪除 1 個元素
      var b = ['a', 'b', 'c', 'd']
      var b1 = b.splice(2, 1)
      console.log(b)      // ["a", "b", "d"]
      console.log(b1)     // ["c"]
      
      // 從第 1 位開始刪除 1 或多個元素,插入"FF"\"GG"
      var c = ['a', 'b', 'c', 'd']
      var c1 = c.splice(1, 2, 'GG', 'FF')
      console.log(c)      // ["a", "GG", "FF", "d"]
      console.log(c1)     // ["b", "c"]
      
      // 從倒數(shù)第 2 位開始刪除 1 個元素
      var d = ['a', 'b', 'c', 'd']
      var d1 = d.splice(-2, 1)
      console.log(d)      // ["a", "b", "d"]
      console.log(d1)     // ["c"]
      
      // 刪除第2位后的所有元素
      var f = ['a', 'b', 'c', 'd']
      var f1 = f.splice(2)
      console.log(f)      // ["a", "b"]
      console.log(f1)     // ["c", "d"]
      
    • 6、reverse()方法將數(shù)組中的元素的位置顛倒,并返回該數(shù)組。

      var arr = ['a', 'b', 'c', 'd'];
      console.log(arr.reverse()); // ["d", "c", "b", "a"]
      console.log(arr);   // ["d", "c", "b", "a"]
      
    • 7、sort()方法用原地算法對數(shù)組的元素進(jìn)行排序,并返回?cái)?shù)組。默認(rèn)排序順序是在將元素轉(zhuǎn)換為字符串,然后比較它們的UTF-16代碼單元值序列時構(gòu)建的。(由于它取決于具體實(shí)現(xiàn),因此無法保證排序的時間和空間復(fù)雜性)

      var a1 = [1, 30, 4, 21, 100000]
      console.log(a1.sort())      // [1, 100000, 21, 30, 4]
      console.log(a1)     // [1, 100000, 21, 30, 4]
      
  • 三、其它的數(shù)組操作方法:indexOflastIndexOf、valueOf()、every()some()、map()filter()、forEach()數(shù)組遍歷、isArray

    • 1、indexOflastIndexOf都接受兩個參數(shù):查找的值、查找起始位置(可選)。
      不存在,返回 -1 ;存在,返回位置。indexOf是從前往后查找, lastIndexOf是從后往前查找。

      var a = ['a', 'b', 'c', 'd'];
      console.log(a.indexOf('b'))     // 1
      console.log(a.indexOf('e'))     // -1
      console.log(a.lastIndexOf('d')      // 3
      console.log(a.lastIndexOf('e'))     // -1
      
    • 2、valueOf()方法返回指定對象的原始值。
      該原始值由 Array 對象派生的所有對象繼承。

    • 3、every() 方法測試一個數(shù)組內(nèi)的所有元素是否都能通過某個指定函數(shù)的測試。它返回一個布爾值。(若收到一個空數(shù)組,此方法在一切情況下都會返回 true)

      var age = [18, 20, 16, 15, 22];
      function adult(age){
          return age < 30
      }
      console.log(age.some(adult))   //true
      console.log(age)    //[18, 20, 16, 15, 22]
      
    • 4、some()方法用于檢測數(shù)組中的元素是否滿足指定條件(函數(shù)提供)。如果有一個元素滿足條件,則表達(dá)式返回true , 剩余的元素不會再執(zhí)行檢測。如果沒有滿足條件的元素,則返回false。(如果用一個空數(shù)組進(jìn)行測試,在任何情況下它返回的都是false)

      var age = [18, 20, 16, 15, 22];
      function adult(age){
          return age < 18
      }
      console.log(age.some(adult))   //true
      console.log(age)    //[18, 20, 16, 15, 22]
      
    • 5、map()通過指定函數(shù)處理數(shù)組的每個元素,并返回處理后的數(shù)組。

      var age = [18, 20, 16, 15, 22];
      function adult(x){
          return x - 10
      }
      console.log(age.map(adult)) //[8, 10, 6, 5, 12]
      console.log(age)    //[18, 20, 16, 15, 22]
      
    • 6、filter()方法創(chuàng)建一個新的數(shù)組,新數(shù)組中的元素是通過檢查指定數(shù)組中符合條件的所有元素。

      var age = [18, 20, 16, 15, 22];
      function adult(x){
          return x >= 20
      }
      console.log(age.filter(adult)) // [20, 22]
      console.log(age)    // [18, 20, 16, 15, 22]
      
    • 7、forEach()方法對數(shù)組的每個元素執(zhí)行一次提供的函數(shù)。

      // array.forEach(function(currentValue, index, arr), thisValue)
      // function(currentValue, index, arr)   必需。 數(shù)組中每個元素需要調(diào)用的函數(shù)。
      //( currentValue.必需。當(dāng)前元素, 
      //  index.可選。當(dāng)前元素的索引值,  
      //  arr.可選。當(dāng)前元素所屬的數(shù)組對象。)
      // thisValue 可選。傳遞給函數(shù)的值一般用 "this" 值。如果這個參數(shù)為空, "undefined" 會傳遞給 "this" 值
      let arr = [1, 2, 3, 4];
      var a= arr.forEach((item, index, array) => {
          console.log(item);
          // 依次打印1, 2, 3, 4, return并沒有終止forEach的循環(huán)
          return item * 2;
      });
      
      console.log(arr);
      // [1, 2, 3, 4],不會修改元數(shù)組
      
    • 8、isArray方法用于判斷一個對象是否為數(shù)組。

      var fruits = ["Banana", "Orange", "Apple", "Mango"];
      var a = Array.isArray(fruits);
      console.log(a); //true
      
  • 三、ES6新增新操作數(shù)組的方法 :find()findIndex()、fill()copyWithin()、from、of、entries()返回迭代器:返回鍵值對、values() 返回迭代器:返回鍵值對的value、keys() 返回迭代器:返回鍵值對的key、includes。

    • 1、find()方法返回?cái)?shù)組中滿足提供的測試函數(shù)的第一個元素的值。否則返回 undefined。

      var arr = [3, 10, 18, 20];
      var arr1 = arr.find((e) => e < 10);
      console.log(arr1);   // 3
      
    • 2、findIndex()方法返回傳入一個測試條件(函數(shù))符合條件的數(shù)組第一個元素位置。否則返回-1。

      var arr = [3, 10, 18, 20];
      var arr1 = arr.findIndex((e) => e >= 18);
      console.log(arr1);      //  2
      
    • 3、fill()方法用一個固定值填充一個數(shù)組中從起始索引到終止索引內(nèi)的全部元素。不包括終止索引。會改變原數(shù)組(IE 11 及更早版本不支持 fill() 方法)

      // array.fill(value, start, end)
      // value必需。填充的值。
      // start可選。開始填充位置。
      // end可選。停止填充位置 (默認(rèn)為 array.length)
      
      const arr = [1, 2, 3, 4, 5];
      console.log(arr.fill(0, 2, 4));     //  [1, 2, 0, 0, 5]
      console.log(arr.fill(7, 1));        //  [1, 7, 7, 7, 7]
      console.log(arr.fill(9));           //  [9, 9, 9, 9, 9]
      
    • 4、copyWithin()方法淺復(fù)制數(shù)組的一部分到同一數(shù)組中的另一個位置,并返回它,不會改變原數(shù)組的長度。

      // array.copyWithin(target, start, end)
      // target必需。復(fù)制到指定目標(biāo)索引位置。
      // start可選。元素復(fù)制的起始位置。
      // end可選。停止復(fù)制的索引位置 (默認(rèn)為 array.length)。如果為負(fù)值,表示倒數(shù)。
      
      const arr = ['a', 'b', 'c', 'd', 'e'];
      console.log(arr.copyWithin(0, 3, 4));   // ["d", "b", "c", "d", "e"]
      console.log(arr.copyWithin(1, 3));      //["d", "d", "e", "d", "e"]
      
    • 5、from()方法從一個類似數(shù)組或可迭代對象創(chuàng)建一個新的,淺拷貝的數(shù)組實(shí)例。

      // Array.from(arrayLike[, mapFn[, thisArg]])
      // arrayLike 想要轉(zhuǎn)換成數(shù)組的偽數(shù)組對象或可迭代對象。
      // mapFn 可選。如果指定了該參數(shù),新數(shù)組中的每個元素會執(zhí)行該回調(diào)函數(shù)。
      // thisArg 可選。執(zhí)行回調(diào)函數(shù) mapFn 時 this 對象。
      
      console.log(Array.from('Array'));   // ["A", "r", "r", "a", "y"]
      console.log(Array.from([1, 2, 3], x => x + x));     // [2, 4, 6]
      
    • 6、of()方法創(chuàng)建一個具有可變數(shù)量參數(shù)的新數(shù)組實(shí)例,而不考慮參數(shù)的數(shù)量或類型。

      // Array.of() 和 Array 構(gòu)造函數(shù)之間的區(qū)別在于處理整數(shù)參數(shù):
      //      Array.of(7) 創(chuàng)建一個具有單個元素 7 的數(shù)組,
      //      而 Array(7) 創(chuàng)建一個長度為7的空數(shù)組
      //   (注意:這是指一個有7個空位(empty)的數(shù)組,而不是由7個undefined組成的數(shù)組)。
      
      console.log(Array.of(7));   // [7]
      console.log(Array.of(1, 2, 3));   //   [1, 2, 3]
      
      console.log(Array(7));   // [ , , , , , , ]
      console.log(Array(1, 2, 3));   // [1, 2, 3]
      
      
    • 7、entries()方法返回一個數(shù)組的迭代對象,該對象包含數(shù)組的鍵值對 (key/value)。(迭代對象中數(shù)組的索引值作為 key, 數(shù)組元素作為 value。)

      // next方法,可用用于遍歷迭代器取得原數(shù)組的[key,value]。
      
      var arr = ['a', 'b', 'c', 'd']
      var a = arr.entries()
      
      console.log(a.next().value)     // [0, "a"]
      console.log(a.next().value)     // [1, "b"]
      console.log(a.next().value)     // [2, "c"]
      console.log(a.next().value)     // [3, "d"]
      
      //也可循環(huán)打印出來
      for(const b of a){
          console.log(b)
      }
      // [0, "a"]
      // [1, "b"]
      // [2, "c"]
      // [3, "d"]
      // for of是ES6提供的遍歷迭代器對象的方式
      
    • 8、values()方法返回一個新的 Array Iterator 對象,該對象包含數(shù)組每個索引的值

      var arr = ['a', 'b', 'c', 'd']
      var a = arr.values()
      
      for(const b of a){
          console.log(b)
      }
      
      // a
      // b
      // c
      // d
      // for of是ES6提供的遍歷迭代器對象的方式  
      
    • 9、keys()方法返回一個包含數(shù)組中每個索引鍵的Array Iterator對象。

      var arr = ['a', 'b', 'c', 'd']
      var a = arr.keys()
      
      for(const b of a){
          console.log(b)
      }
      // 0
      // 1
      // 2
      // 3
      // for of是ES6提供的遍歷迭代器對象的方式  
      
    • 10、includes()方法用來判斷一個數(shù)組是否包含一個指定的值,如果是返回 true,否則false。

      // arr.includes(searchElement, fromIndex)
      //  searchElement   必須。需要查找的元素值。
      //  fromIndex   可選。從該索引處開始查找 searchElement。 默認(rèn)為 0。
      //          如果為負(fù)值,則按升序從 array.length + fromIndex 的索引開始搜索。
      
      var arr = ['a', 'b', 'c', 'd']
      
      console.log(arr.includes('a'))      //true
      console.log(arr.includes('a', 3))   //false
      console.log(arr.includes('gg'))     //false
      
      
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,908評論 6 541
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,324評論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,018評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,675評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,417評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,783評論 1 329
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,779評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,960評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,522評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,267評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,471評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,009評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,698評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,099評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,386評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,204評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,436評論 2 378

推薦閱讀更多精彩內(nèi)容