js如何Copy数组

工作中遇到了需要给每个点记录位置,由于每个点基本行政位置是一样的,比如[中国,北京,海淀区],[中国,北京,朝阳区],于是就想到了用一个数组去存储共同的信息,然后赋值给另一个数组,这个新数组再去添加不同值。降低了对每个点公用信息的入库查询。

var regionNames = [中国, 北京];
var poi = {};
// 其他poi属性赋值
// ...
poi.region = regionNames;
poi.region.push('海淀');
// 入库操作 ...
var poi2 = {};
// ...
poi2.region = regionNames;
poi2.region.push('朝阳');
// 入库操作 ...

结果从console.log(poi2.region); 中发现其实结果是[中国, 北京, 海淀, 朝阳]; 这才发现原来数组是引用赋值(对象也是引用赋值)。

可是javascript自身并没有实现clone这个功能,需要自己去实现,google了一下找到了比较简洁方法。

1. 采用数组的concat 方法。

var regionNames = [中国, 北京];
var poi = {};
poi.region = [].concat(regionNames);
poi.region.push('朝阳');
console.log(regionNames); // the result is [中国, 北京]

2. 采用数组的slice 方法。

var regionNames = [中国, 北京];
var poi = {};
poi.region = [].slice(regionNames);
poi.region.push('朝阳');
console.log(regionNames); // the result is [中国, 北京]

3. 就是自己循环实现数组的复制。javascript基本类型的值都是赋值都是复制一份变量的。

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>