我试图在每次用户点击它时触发对数组值的操作,但无论出于何种原因,即使该数组在函数之外,它仍然会更改它的值。有谁知道如何确保外部数组的值不会受到影响? 提前感谢大家的时间和帮助。
jQuery的:
var nums = new Array('one', 'two', 'three', 'four', 'five');
$('.nums')on('click', function() {
var numId = $(this).attr('id');
var newNums = nums;
var num = newNums.indexOf('#'+numId);
newNums.length = num + 1;
console.log('#'+numId, nums, newNums, num);
});
答案 0 :(得分:2)
您需要使用slice()
按值复制数组,您当前的赋值会引用nums
数组,并且只要函数内的值发生变化,初始数组就会受到影响:
var nums = new Array('one', 'two', 'three', 'four', 'five');
$('.nums')on('click', function() {
var numId = $(this).attr('id');
var newNums = nums.slice();
var num = newNums.indexOf('#'+numId);
newNums.length = num + 1;
console.log('#'+numId, nums, newNums, num);
});
答案 1 :(得分:0)
使用newNums = nums
指向newNums到nums,并且不会创建nums数组的副本。要创建副本,您可以使用Array#slice
:
var newNums = nums.slice(0);
请注意,这是一个浅表副本。如果原始数组包含对象,则新数组(在切片之后)将包含对原始对象的引用,并更改" new"对象,将改变原件。在这种情况下,您必须通过手动迭代数组并创建新对象来进行深层复制。