You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

jQuery中splice修改数组致关联数组同步变更,如何保留初始数组?

解决数组赋值后同步修改的问题

这是个非常常见的JavaScript引用类型陷阱!你遇到的问题根源在于:数组属于引用类型,当你执行var $new_questions2 = $new_questions;的时候,并没有复制出一个新数组,而是让$new_questions2$new_questions指向了内存中的同一个数组对象。所以不管你通过哪个变量修改数组,两个变量都会看到变化后的结果。

要保留$new_questions2的初始值,你需要创建原数组的浅拷贝,这里有几种简单可靠的方法:

方法1:使用slice()方法

slice()方法如果不传参数(或者传0作为起始索引),会返回一个包含原数组所有元素的新数组:

var $new_questions2 = $new_questions.slice();

方法2:使用ES6扩展运算符

这是最简洁的写法,把原数组的元素展开到新数组中:

var $new_questions2 = [...$new_questions];

方法3:使用Array.from()

ES6新增的方法,专门用于从现有可迭代对象(包括数组)创建新数组:

var $new_questions2 = Array.from($new_questions);

方法4:使用concat()方法

老版本JS也支持的写法,通过空数组和原数组拼接生成新数组:

var $new_questions2 = [].concat($new_questions);

修改后的完整代码示例

slice()方法举例,修改后代码如下:

$(document).ready(function(){ 
    var $new_questions = [1,2,3,4,5]; 
    var $new_questions2 = $new_questions.slice(); // 创建数组拷贝
    $new_questions.splice(2, 2); 
    $("#array_values_1").html($new_questions.toString()); 
    $("#array_values_2").html($new_questions2.toString()); 
});

此时$new_questions会变成[1,2,5],而$new_questions2会保留初始的[1,2,3,4,5],完美解决你的问题!

内容的提问来源于stack exchange,提问作者Jaadu

火山引擎 最新活动