1. 程式人生 > 其它 >為什麼改了JS陣列中的一個元素的值,其他陣列元素值都跟著變了

為什麼改了JS陣列中的一個元素的值,其他陣列元素值都跟著變了

部分內容摘抄自:https://www.cnblogs.com/KevinTong/p/11414770.html

原因:

  陣列是引用型別,陣列變數儲存在棧,元素資料儲存在堆中,將陣列賦值不同的物件,所以的賦值物件都指向堆同一個資料,所以改變其中一個數組中的元素,別的陣列元素也會改變。

解決方案:

  原理就是先把陣列轉換成字串再轉換成物件 ,這樣會新分配一塊記憶體,就不會指向同一個堆中的資料。

例子: var tmp = JSON.parse(JSON.stringify(array));

       var checkRows = table.checkStatus(CustomerList.tableId);
            var checkRowsYear= [];
            for (var i = 0; i 
< checkRows.data.length; i++) { var yearList = checkRows.data[i].year.split(','); var paramValue = checkRows.data[i]; for (var j = 0;j < yearList.length;j++){ var tmp = JSON.parse(JSON.stringify(paramValue));
tmp['year'] = yearList[j]; checkRowsYear.push(tmp); } }