单击

时间:2017-06-19 10:17:22

标签: javascript jquery arrays

我试图在每次用户点击它时触发对数组值的操作,但无论出于何种原因,即使该数组在函数之外,它仍然会更改它的值。有谁知道如何确保外部数组的值不会受到影响? 提前感谢大家的时间和帮助。

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);
});

2 个答案:

答案 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"对象,将改变原件。在这种情况下,您必须通过手动迭代数组并创建新对象来进行深层复制。