JS中數組的一些筆記
阿新 • • 發佈:2018-09-07
原來 就是 pre 一次 一個 浪費 個數 array push
今天工作時碰到一個需求,有兩個數組arrayChild, arrayFather, 要求:
1、往數組arrayChild中放入一個元素;
2、將當前的數組arrayChild放入arrayFather中;
3、清空數組arrayChild,將一個新元素放進去;
4、將放了新元素的arrayChild放入數組arrayFather中。
剛開始是這麽寫的:
const arrayChild = []; const arrayFather = []; arrayChild.push(0, 1); arrayFather.push(arrayChild); arrayChild.splice(0); arrayChild.push(3, 4); arrayFather.push(arrayChild); console.log(`arrayFather = ${arrayFather}`);
預想結果是:
arrayFather = [[0, 1], [3, 4]];
實際結果:
arrayFather = [[3, 4], [3, 4]];
為什麽呢?向公司老司機請教,才知道原來創建一個數組時,會在內存中開辟一塊地址A,我的arrayChild只是指向了那片地址,所以使用const聲明的數組,還可以繼續向數組內添加東西。在第一步,arrayFather.push(arrayChild),也是將arrayFather指向了arrayChild指向的地址A,然後splice是清除arrayChild中的數據,就是將內存中的數據全部清除,所以這時arrayFather = arrayChild = []。這時再往arrayChild中添加新數據,那麽arrayFather = arrayChild = [3, 4], 然後arrayFather又push了一次arrayChild,所以最後arrayFather = [[3, 4], [3, 4]]
那想要實現需求怎麽辦呢?可以用這種方法:
let arrayChild = [];
const arrayFather = [];
arrayChild.push(0, 1);
arrayFather.push(arrayChild);
arrayChild = [];
arrayChild.push(3, 4);
arrayFather.push(arrayChild);
console.log(`arrayFather = ${arrayFather}`);
預想結果是: arrayFather = [[0, 1], [3, 4]]; 實際結果: arrayFather = [[0, 1], [3, 4]];
這裏的arrayChild = []就是在內存中重新開辟一片地址了,所以原來的值還會存在,最終的目的達成。然而,新開辟一片內存意味著資源浪費。具體解決辦法明天講解。
JS中數組的一些筆記