數組哪些方法能改變原數組,以及循環改變數組的情況


    {
        //不改變原數組的方法:concat(),join(),slice(),toString()
        let arr1 = [1,2],arr2=[3,4],arr3 = [1,2,3,4,5,6];
        console.log(arr1.concat(arr2),arr1,arr2) //[1, 2, 3, 4]  [1, 2]  [3, 4] 不改變原數組,返回新的數組
    
        console.log(arr3.join(','),arr3) // [1, 2, 3, 4, 5, 6] "1,2,3,4,5,6"    不改變原數組,返回字符串

        console.log(arr3.slice(0,4),arr3) //[1, 2, 3, 4]   [1, 2, 3, 4, 5, 6]   不改變原數組,返回一個新數組

        console.log(arr3.toString(arr3),arr3) //1,2,3,4,5,6  [1, 2, 3, 4, 5, 6] 不改變原數組,返回數組的字符串形式

        //改變原數組的方法:push(),pop(),unshift(),shift(),reverse(),sort(),splice()
        console.log(arr1.push(6),arr1);//3 [1, 2, 6]             向數組的末尾添加一個或多個元素,改變原數組,返回新數組的長度

        console.log(arr1.pop(),arr1) //6  [1, 2]                 刪除數組最后一個元素,如果數組為空,則不改變數組,返回undefined,改變原數組,返回被刪除的元素

        console.log(arr1.unshift(3,5),arr1) //4  [3, 5, 1, 2]    向數組的開頭添加一個或多個元素,改變原數組,返回新數組的長度

        console.log(arr1.shift(3,5),arr1)  //3  [5, 1, 2]        向數組的開頭刪除一個或多個元素,改變原數組,返回新數組的長度

        console.log(arr2,arr2.reverse(3,5)) //[4, 3]  [4, 3]     顛倒數組中元素的順序,改變原數組,返回該數組

        console.log(arr2,arr2.sort()) //[3, 4]  [3, 4]           改變原數組,返回該數組

        console.log(arr2,arr2.splice(0,1,9)) //[9, 4] [3]        改變原數組,返回被刪除的元素    
    }
    {
     //循環數組   
     let arr = [1,2,3,4,5,6]; //數組的內容為基本類型
     arr.forEach(item => {
         item = 99;
     })
     console.log(arr); //[1,2,3,4,5,6] 無法改變原數組的值

     arr.forEach((item,index) => {
         arr[index] = 99;
     })
     console.log(arr); //[99,99,99,99,99,99] 可以用下標改變原數組的值
     // ------------------------------------------------------------------------
     let arr2 = [{name:'張三',age:18},{name:'李四',age:19},{name:'王五',age:20}]; //數組的內容為引用類型

     arr2.forEach(item=>{//item 都是原數組所對應的對象的地址值
         item = 465;//此時修改的只是引用類型的地址,而未修改其值,原數組的值並不會改變
     })
     console.log(arr2)//[{name:'張三',age:18},{name:'李四',age:19},{name:'王五',age:20}] 

     arr2.forEach(item=>{//item 都是原數組所對應的對象的地址值
         item.age++;//此時修改的其地址所對應堆的值,會改變其原數組的值
     })
     console.log(arr2)//[{name:'張三',age:19},{name:'李四',age:20},{name:'王五',age:21}]
     /*
        總結:其實 forEach 和 map 的最大共同點就是都是函數, item 就相當於是形參, 形參可能會改變實參, 類比上面結論可以得知:

        如果實參是基本類型, 那確實改變不了實參;

        如果實參是引用類型:

        函數修改了形參的地址值或將其修改為基本類型, 改變不了實參

        函數沒有修改形參的地址值, 只是修改形參內部的某些屬性, 會改變實參
     */
    }

 


免責聲明!

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



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