• 数组哪些方法能改变原数组,以及循环改变数组的情况


        {
            //不改变原数组的方法: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 就相当于是形参, 形参可能会改变实参, 类比上面结论可以得知:
    
            如果实参是基本类型, 那确实改变不了实参;
    
            如果实参是引用类型:
    
            函数修改了形参的地址值或将其修改为基本类型, 改变不了实参
    
            函数没有修改形参的地址值, 只是修改形参内部的某些属性, 会改变实参
         */
        }
    不停学习,热爱是源源不断的动力。
  • 相关阅读:
    2017.4.6下午
    2017.4.6上午
    2017.3.31下午
    2017.4.5下午
    2017.4.5上午
    2017.4.1上午
    2017.3.31上午
    2017.3.28下午
    2017.3.28上午
    3.28上午
  • 原文地址:https://www.cnblogs.com/ximenchuifa/p/15209565.html
Copyright © 2020-2023  润新知