1. 程式人生 > >JS中數組的一些筆記

JS中數組的一些筆記

原來 就是 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中數組的一些筆記