描述:数组对象赋值,即arr1=[{},{},{}]这种数据结构的对象赋值,将arr1赋值给arr2;然后删除arr2里的元素

一、最常用的=

arr2 = arr1;

detect(val) {
let temp = [];
let self=this;
temp = self.tableBaseStorage; //这个tableBaseStorage是data(){return{}}全局变量
console.log("tableBaseStorage");
console.log(self.tableBaseStorage);
let userName = this.search;
let count = 0;
for (let i = 0; i < temp.length; i++) {
if (!(temp[i].userName === userName)) {
console.log(temp[i].userName);
temp.splice(i, 1); //这种删除方式会自动更新长度,慎用
i--;
//delete temp[i];
count++;
console.log("删除");
}
}
console.log(count);
self.tableBase = temp;
//console.log(this.tableBase);
},

你会发现当这个函数被第二次调用的时候,按理说this.tableBaseStorage是不会变的,每一次调用这个函数,都是从tableBaseStorage拿到数据那后对其筛选删除;

但奇怪的是这个tableBaseStorage却是变了,第二次调用好像莫名其妙的被掉包了一样;

现象:第一次调用detect()函数删了temp什么元素,tableBaseStorage同样被删除了同样的元素,故第二次再调用detect()函数此时的tableBaseStorage已经变了;

原因:JavaScript中=赋值是指针赋值,删除中间变量temp[ ]里的元素,会一直删到它爹tableBaseStorage

下面有几种解决措施供参考

二、解决措施,避免数组的指针赋值

1.循环赋值

    let temp = [];
let self=this;
for(let j=0;j<self.tableBaseStorage.length;j++){
temp[j] = self.tableBaseStorage[j];
}

2.数组的concat方法

说明

返回一个新数组,这个新数组是由两个或更多数组组合而成的。

array1.concat([item1[, item2[, . . . [, itemN]]]])

参数

array1

必选项。其他所有数组要进行连接的 Array 对象。

item1,. . ., itemN

可选项。要连接到 array1 末尾的其他项目。

示例

//temp=self.tableBaseStorage.concat();

3.JSON.parse & JSON.stringify

先stringify再parse成数组对象

temp = JSON.parse(JSON.stringify(self.tableBaseStorage))

4.es6提供的一种方法

//temp = [...self.tableBaseStorage];

javascript数组赋值操作的坑的更多相关文章

  1. javascript数组赋值操作

    最近在司徒正美的<javascript框架设计>,在里面发现了一个段代码 ...... var _len = arr1.length; while (_len) { arr2[--_len ...

  2. JavaScript数组常见操作

    JavaScript数组常见操作 Tip: 右键在新标签中打开查看清晰大图 下面介绍JavaScript中的数组对象遍历.读写.排序等操作以及与数组相关的字符串处理操作 创建数组 一般使用数组字面量[ ...

  3. Javascript对象赋值操作

    首先,我们还是举个例子来说明对象赋值操作的问题吧: ps: 本文默认约定log = console.log function A(){} A.prototype.x = 10; var a1 = ne ...

  4. JavaScript数组常用操作

    前言 相信大家都用惯了jquery或者underscore等这些类库中常用的数组相关的操作,如$.isArray,_.some,_.find等等方法.这里无非是对原生js的数组操作多了一些包装. 这里 ...

  5. JavaScript数组常用操作总结

    我们在日常开发过程中,使用到原生 JavaScript的时候,有时候会频繁的对数组进行操作,今天我把工作以来,经常用到的有关 JavaScript数组的方法总结一下,方便日后工作的时候查找使用! 一. ...

  6. Javascript 数组相关操作

    数组排序问题: sort() arr.sort() 可以直接进行排序,但是排序的方式是按unicode 顺序而来,比如1,1000,200,这个顺序不是我们想要的结果: 所以有了另一种方法,针对num ...

  7. JavaScript数组的操作

    <html> <head> <meta charset="utf-8"> <title>无标题文档</title> &l ...

  8. NumPy 学习(2): 数组的操作

    1. 简单一维数组的操作 一维数组的操作类似于python自身的list类型. In [14]: arr = np.arange(10) In [15]: arr Out[15]: array([0, ...

  9. Javascript数组操作

    使用JS也算有段时日,然对于数组的使用,总局限于很初级水平,且每每使用总要查下API,或者写个小Demo测试下才算放心,一来二去,浪费不少时间:思虑下,堪能如此继续之?当狠心深学下方是正道. 原文链接 ...

随机推荐

  1. 如何从word中复制内容到网站后台编辑器中

    word图片转存,是指UEditor为了解决用户从word中复制了一篇图文混排的文章粘贴到编辑器之后,word文章中的图片数据无法显示在编辑器中,也无法提交到服务器上的问题而开发的一个操作简便的图片转 ...

  2. [tyvj]P1939玉蟾宫[单调栈]

    [tyvj]P1939 玉蟾宫 ——!x^n+y^n=z^n 背景 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 描述 这 ...

  3. 【Unity优化】Unity中究竟能不能使用foreach?

    关于这个话题,网络上讨论的很多,我也收集了一些资料,都不是很齐全,所以自己亲自测试,这里把结果分享给大家. foreach究竟怎么了? 研究过这个问题的人都应该知道,就是它会引起频繁的GC Alloc ...

  4. (转)jupyter常用快捷键

    转:http://www.mamicode.com/info-detail-2395285.html Jupyter Notebook 有两种键盘输入模式.即命令模式和编辑模式,这与 vim有些类似. ...

  5. Anaconda在Python3和Python2之间切换,Conda命令,anaconda中python的升级和降级

    当在pycharm IDE中指定不同的Python版本时,设置方法 File->Setting->Project:XXXX->Project Interpreter    选择不同位 ...

  6. WCF Error Handling

    https://docs.microsoft.com/en-us/dotnet/framework/wcf/wcf-error-handling The errors encountered by a ...

  7. random——伪随机数生成模块

    random——伪随机数生成模块 转自:https://blog.csdn.net/zhtysw/article/details/79978197 该模块包含构造伪随机数生成器的多个方法.对于整数,伪 ...

  8. scrapy电影天堂实战(二)创建爬虫项目

    公众号原文 创建数据库 我在上一篇笔记中已经创建了数据库,具体查看<scrapy电影天堂实战(一)创建数据库>,这篇笔记创建scrapy实例,先熟悉下要用到到xpath知识 用到的xpat ...

  9. Duplicate entry '4799' for key 'PRIMARY'

    增加1条SQL记录报错: Operation failed: There was an error while applying the SQL script to the database. Exe ...

  10. 不同vlan之间相互通信

    不同VLAN之间相互通信的两种方式 (单臂路由.三层交换) 试验目的: 1.通过单臂路由实现不同VLAN之间的通信 2.通过三层交换路由功能实现不同VLAN之间的通信   网络拓扑图: 1.单臂路由实 ...