91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript中數組怎么克隆

發布時間:2020-12-02 13:52:46 來源:億速云 閱讀:103 作者:小新 欄目:web開發

這篇文章主要介紹JavaScript中數組怎么克隆,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

js主要分基本數據類型引用數據類型兩大類

基本數據類型包括:number,string,undefine,null,boolean,Symbol(es6新增)
引用數據類型:Object,Array,Function,Data等
注意:基本數據類型放在**棧空間內**,并且是按值存放,可以直接讀取和操作。
引用數據類型存放在**堆空間內**(門),變量的值其實是指向堆空間的地址(鑰匙),因此如果克隆這個變量,相當于復制鑰匙。

let arr = [1,2,3,4,5]
let arr1 = arr  // 這一步相當于把arr棧空間的地址賦給了arr1,其實arr和arr1操作的是同一個堆空間的對象
arr1.push(6) // arr1 = [1,2,3,4,5,6]
console.log(arr) //[1,2,3,4,5,6]

因此對于引用類型的拷貝,需要拷貝堆空間的對象

數組淺拷貝
1.運用數組slice與concat方法返回一個新數組的特性

let arr = [1,2,3,4,5]
let arr1 = arr.slice() //[1,2,3,4,5]
let arr2 = arr.concat() //[1,2,3,4,5]

2.簡單粗暴的方法-遍歷

let arr = [1,2,3,4,5]
let arr2 = []
arr.forEach(item=>{
    arr2.push(item)
    }
)
console.log(arr2)

3.es6新增方法-拓展運算符

let arr = [1,2,3,4,5]
let arr1 = [...arr] //[1,2,3,4,5]

4.es6新增方法-Object.assign
let arr = [1,2,3,4,5]
let arr1 = []
Object.assign(arr1,arr)
console.log(arr1) //[1,2,3.4,5]

如果數組里嵌套數組和對象,淺拷貝只會拷貝該數組或者對象存放在棧空間的地,因此無論在新舊數組中改變此地址指向的對象,兩個數組都會發生改變。 因此我們需要深拷貝來拷貝此類數組。

數組深拷貝
1.普通遍歷,遍歷到引用類型時候進行引用類型的拷貝

let arr = [1,2,3,4,5,{name:'bob'},['a','b']]
      function clone (arr) {
        let arr1 = []
        arr.forEach(item=>{
        //如果不是object,將該值插入到新數組
          if(typeof(item) !== 'object') {
            arr1.push(item)
          } else {
          //根據遍歷的對象新建一個相同類型的空對象
            let obj = item instanceof Array ? [] : {}
            for(var key in item){
              if(item.hasOwnProperty(key)){
                obj[key] = item[key]
              }
            }
            arr1.push(obj)
          }
        })
        return arr1
      }
      let arr1 = clone(arr)
      arr1[5].name = 'js'
      console.log(arr,'arr',arr1,'arr1')

2.簡單粗暴(能拷貝數組和對象,但不能拷貝函數)

let arr = [1,2,3,4,5,{name:'bob'},['a','b']]
let arr1 = JSON.parse(JSON.stringify(arr))

以上是“JavaScript中數組怎么克隆”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永城市| 乌拉特前旗| 大悟县| 威信县| 和平县| 建湖县| 乐陵市| 同江市| 噶尔县| 永丰县| 开鲁县| 梁平县| 固阳县| 社旗县| 长武县| 乌拉特中旗| 阿克苏市| 溧水县| 石泉县| 新营市| 泰兴市| 济阳县| 桐柏县| 奉节县| 宁陕县| 隆德县| 栾城县| 斗六市| 南溪县| 遂平县| 突泉县| 巴塘县| 鄂尔多斯市| 饶河县| 普兰县| 宝应县| 陈巴尔虎旗| 潞城市| 琼海市| 沙田区| 抚远县|