首页 > 编程语言 > 详细

JS中数组的一些笔记

时间:2018-09-07 19:57:09      阅读:200      评论:0      收藏:0      [点我收藏+]

今天工作时碰到一个需求,有两个数组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中数组的一些笔记

原文:https://www.cnblogs.com/wz71014q/p/9606493.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!