01-JavaScript常見的數組方法

JavaScript常見的數組方法

pop()

  • pop()方法會從數組中刪除最后一個元素,并返回最后一個元素.
    const arrs = [1,2,3,4,5]
    const res = arrs.pop()
    console.log(res)   // 5

push()

  • push()方法允許你向數組中添加一個或多個元素
  • push()會返回新增數組后新的長度
    const arrs = [1,2,3,4,5]
    let res = arrs.push(888);
    console.log(arrs) // [1, 2, 3, 4, 5, 888]
    console.log(res)  // 6 得到新的數組長度

shift()

  • shift()方法會刪除數組的第一個元素并返回它
    const arrs = [1,2,3,4,5]
    const res = arrs.shift()
    console.log(res)   // 1

unshift()

  • unshift()方法允許向數組的開頭添加一個或多個元素
  • 會將新增后的數組長度返回
   const arrs = [1,2,3,4,5]
   let res = arrs.unshift(888);
   console.log(arrs) // [888, 1, 2, 3, 4, 5]
   console.log(res)  // 6 得到新的數組長度

清空數組的幾種方式

  • 1.如何清空數組
    let arr = [1,2,3,4,5];
    // 清空數組的三個方法;
    // 第一種:直接將空數組賦值給數組
    arr = [];
    // 設置數組的長度為0
    arr.length = 0;
    // 利用splice
    arr.splice(0, arr.length);
    console.log(arr);

includes()

  • includes作用就是判斷元素元素是否在數組中,
    • 如果數組中有這個元素就返回true,否則返回的是false
    const arrs = [1,2,3,4,5]
    // const hasParam = arrs.includes(2)   // true
    const hasParam = arrs.includes('2')  // false
    console.log(hasParam)

concat()

  • 數組與數組間的拼接不可以使用+加號進行拼接,如果使用加號進行拼接會將數組轉換成字符串進行拼接
  • 使用concat()方法可以將兩個或多個數據組合起來,返回一個新的數組
  • 注意點:不會修改原有的數組;
  • 該方法的代替方式可以使用ES6的解構來實現
    const arr1 = [1,3]
    const arr2 = [2,4]
    const arr3 = [5,6]
    // + 加號拼接數組
    const str = arr1 + arr2;
    console.log(str);  // 1,32,4
    console.log(typeof str); // string

    // const res = arr1.concat(arr2)
    // console.log(res);  //[1, 3, 2, 4]
    const res = arr1.concat(arr2,arr3)
    console.log(res);  // [1, 3, 2, 4, 5, 6]

    // 補充: 可以使用擴展運算符來拼接數組
    // 解構數組中會將解構出來的元素放在新的數組中,返回給我們
    let res1 = [...arr1, ...arr2, ...arr3];
    console.log(res1);  //  [1, 3, 2, 4, 5, 6]
    console.log(typeof res1) // obj

    // 自定義函數合并任意多個數組
    function concatAll(arr, ...arrays){
        return arr.concat(...arrays)
    }
    console.log(concatAll(arr1,arr2,arr3));  // [1, 3, 2, 4, 5, 6]

forEach()

  • 當你想要對一個數組進行遍歷操作時,可以使用forEach()方法,它接受一個函數作為參數。事實上它本身接受三個參數:(當前值,索引,數組)
    const arrs = [1,2,3,4,5]
    arrs.forEach(console.log)  // 當前值  索引 和數組
    arrs.forEach((value,index,arr)=>{
        console.log(value);
        console.log(index);
        console.log(arr);

    })

indexOf()

  • indexOf(檢索值,開始查找的位置)
  • indexOf作用: 返回數組中給定元素的第一個索引值. indexOf()也被用于檢查元素是否存在某一個元素
  • indexOf()方法從左到右開始查到,找到元素就停止查找
  • 注意點: 找到元素就會返回元素的對應位置,沒有找到元素就返回-1
    let arrs = [1,2,3,4,5,3]
    let index = arrs.indexOf(3);
    console.log(index);  // 2
    index = arrs.indexOf(3,4);
    console.log(index)  // 5
     

lastIndexOf()

  • 該方法和indexOf()方法使用和傳參一樣,但是查找方式是從右到左開始查找

find()

  • find()方法就是會查找數組中的元素,
  • find()方法找到了就會返回找到的元素,如果找不到就返回undefined
  • find()和filter()相似,但是find()函數找到一個匹配值就會停止查找,而filter會繼續查找
    const arrs = [1,2,3,4,5,4,3,2,1]
    const res = arrs.find(arr=> arr == 5)
    console.log(res)  // 5

    const obj = [
        {
            name: 'zs',
            age:12
        },
        {
            name: 'ww',
            age:33
        },
        {
            name: 'zs',
            age:16
        },
        {
            name: 'll',
            age:14
        },
    ]
    const res1 = obj.find(obj=> obj.name == 'zs')
    console.log(res1)  // {name: "zs", age: 12}

  • 如果是過濾整個數組那么采用filter,搜索數組中唯一元素時,則使用find()

findIndex()

  • 它和find()方法相同,只是他返回的是找到第一個元素的索引值,而不是元素
    const obj = [
        {
            name: 'zs',
            age:12
        },
        {
            name: 'ww',
            age:33
        },
        {
            name: 'zs',
            age:16
        },
        {
            name: 'll',
            age:14
        },
    ]
    const res2 = obj.findIndex(obj=> obj.name == 'ww')
    console.log(res2)  // 2

  • 你可能會認為findIndex()和indexOf()是相同的。事實上他們還是有所差異的。indexOf()的第一個參數是一個原始值(Boolean、Number、String、Null、Undefined或Symbol),而findIndex()的第一個參數是一個回調函數。

  • 因此,當你需要搜索原始值數組中元素的索引時,可以使用indexOf()。如果你有更復雜的元素,如對象,那得使用findIndex()。

slice()

  • slice方法可以幫助我們提取數組的一部分
  • 返回一個新的數組,不會修改原數組
  • slice方法是包含開始索引不包含結束索引 [開始索引,結束索引)
    let arr = [1,2,3,4,5];
    let res = arr.slice(1,3);
    console.log(res); // [2, 3]
    console.log(arr); // [1, 2, 3, 4, 5]

splice()

  • splice()通常用于添加或刪除某個所引出的元素.
  • splice(開始位置(必需),刪除數量(必需),item1,...item2(可選添加的項))

let arr = [1,2,3,4,5];
// arr.splice(1,3);
// console.log(arr) // [1, 5]

arr.splice(1,3,111,2222);
console.log(arr) // [1, 111, 2222, 5]

some()

  • some方法:檢測數組中至少有一個元素通過了測試
  • some()方法將回調函數作為唯一的參數
  • 如果至少有一個元素通過測試,則返回true,否則返回false。

every()

  • every()和some()類似,不同的是some()只要有一個元素符合條件就返回true,而every是所有元素都滿足條件才返回true

toString()

  • 將數組轉換成字符串
       let arr = [1,2,3,4,5];
       let str = arr.toString();
       console.log(str)  // 1,2,3,4,5
       console.log(typeof str) // string
    

join()

  • join()方法沒有傳遞參數,調用toString()方法
  • join()方法可以傳遞參數,把參數作為元素間的連接符號
    let arr = [1,2,3,4,5];
    let str = arr.join("-");
    console.log(str)  // 1-2-3-4-5
    console.log(typeof str) // string

isArray()

  • isArray()方法判斷傳遞的值是否為數組,是數組返回true,否則返回false

sort()

  • sort()方法會對數組中的元素進行排序.
  • 默認的排序方法將所有元素轉換為字符串,并按字母的順序排序
    const fruits = ['banana', 'apple','orange','pear']
    fruits.sort()
    console.log(fruits)  // ["apple", "banana", "orange", "pear"] 默認按字母的順序
  • 但是對于數字
      const nums = [3,72,33,42,5,8]
      nums.sort()
      console.log(nums)  // [3, 33, 42, 5, 72, 8]
    
    
  • 對于數字,sort()接受了一個比較函數,并傳遞兩個參數
  • 參數分別為a,b;然后對這兩個元素進行比較,并且返回一個數字
  • 返回規則:
    • 如果返回的值是一個負數,則表示a排在b之前(升序)
    • 如果返回的值是一個正數,則表示a排在b之后(降序)
    • 如果返回的值是0,則沒有變化
    const nums = [3,72,33,42,5,8]
    nums.sort((a,b)=> a-b)
    console.log(nums)  // [3, 5, 8, 33, 42, 72] 升序
    nums.sort((a,b)=> b-a)
    console.log(nums) // [72, 42, 33, 8, 5, 3] 降序

reverse()

  • reverse()方法就是將數組反轉
  • 注意點: 該方法會修改原有的數組
    const nums = [3,72,33,42,5,8]
    nums.reverse()
    console.log(nums) // [8, 5, 42, 33, 72, 3]

map()

  • map作用:修改數組的元素
  • map()方法會創建一個新數組,其結果是該數據中的每個元素都調用一個提供的函數后返回的結果
    //map使用
    const nums = [1,2,3,4]
    返回的結果 =  map(函數)
    const res = nums.map(n => n+1);
    console.log(nums);  // [1, 2, 3, 4]
    console.log(res);  // [2, 3, 4, 5]  會創建新數組

    // map可以保留對象的一個特定屬性
    const obj = [
        {
            name: 'zs',
            age:12
        },
        {
            name: 'ww',
            age:33
        }
    ]
    const allName = obj.map(obj => obj.name);
    console.log(allName) // ["zs","ww"]


    // 自定義的map功能
    // myMap(數組,回調函數)
    function myMap (collection,callback){
        var iterationInputs = [];
        for(var i = 0 ; i<collection.length; i++){
            iterationInputs.push(callback(collection[i]))
        }
        return iterationInputs
    }

    const res1 =  myMap(nums,n=>n+1)
    console.log(res1)

filter()

  • filter作用: 過濾數組,它接受一個函數作為唯一的參數,
    • 該參數在數組的每個元素上調用,這個函數必須返回一個布爾值
    • true: 元素獎保留在數組中
    • false: 元素不會保留在數組中
    • 最終返回結果也會得到一個新數組,該數組中保留了條件為true下的元素
    • 返回數組中的偶數
    const nums = [1,2,3,4,5,6,7,8]
    const filterNums = nums.filter( n => n%2 == 0)
    console.log(nums) // [1, 2, 3, 4, 5, 6, 7, 8]
    console.log(filterNums)// [2, 4, 6, 8]

    const objArrs = [
        {
            name: 'zs',
            age:12
        },
        {
            name: 'ww',
            age:33
        },
        {
            name: 'll',
            age:22
        }
    ]
    // 移除數組中的特定某項
    function removeObj(objArrs,name){
        return objArrs.filter(obj => obj.name !== name)
    }
    console.log(removeObj(objArrs,'zs'))

    // 自定義filter()
    function myFilter(collection,callback){
        var filterArr = [];
        for (var i = 0; i< collection.length; i++){
            if(callback(collection[i])){
                filterArr.push(collection[i])
            }
        }
        return filterArr
    }

    const res = myFilter(objArrs,obj => obj.name !== 'ww')
    console.log(res);

reduce()

reduce() 方法對數組中的每個元素執行一個由您提供的reducer函數(升序執行),將其結果匯總為單個返回值。

語法

arr.reduce(callback(accumulator, currentValue,?index,?array),[?initialValue])
  • 回調函數接受四個參數

    • accumulator 累計器累計回調的返回值; 它是上一次調用回調時返回的累積值,或initialValue
    • currentValue 數組中正在處理的元素
    • index (可選) 調用reduce()數組
    • array(可選) 調用reduce()的數組
  • 返回值

    • 函數累計處理的結果
const array1 = [1, 2, 3, 4];
const reducer = (accumulator, currentValue) => accumulator + currentValue;

// 1 + 2 + 3 + 4
console.log(array1.reduce(reducer));
// expected output: 10
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,967評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,273評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,870評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,742評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,527評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,010評論 1 322
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,108評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,250評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,769評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,656評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,853評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,371評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,103評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,472評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,717評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,487評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,815評論 2 372