无法更改函数内部传递的数组

时间:2018-08-01 14:28:44

标签: javascript vue.js vuejs2

假设我们有a = [1,2,3,4,5],我想通过使用函数将其归零([0,0,0,0,0])。 这有效:

function clear (arr) {
  arr.forEach((element, index) => {arr[index] = 0});
}

但这不是:

function clear2 (arr) {
  arr = [...arr].fill(0);
}

arr.fill(0)中的clear2()可以工作,但是它在Vue.js中运行,因此我无法按索引分配数组元素,我需要完全重新分配数组var才能保持反应性。

为什么clear2()不起作用?作为对象的数组应该通过引用传递,那么我在做什么错了?

更新:我在Vue中将它用作单击方法,因此我无法从中返回,而是希望将不同的数组作为参数传递。

2 个答案:

答案 0 :(得分:1)

使用

  arr = [...arr].fill(0);

您要创建原始数组的副本,然后更改该副本的值,然后将参数的参考值设置为新数组(您不更新参数的内部状态)

arr.forEach((element, index) => {arr[index] = 0}); 

您实际上正在更新数组参数的内部状态

答案 1 :(得分:1)

您可以直接使用fill,因为

  

fill方法是可变方法,它将更改此对象本身并返回它,而不仅仅是返回它的副本。

function clear(array) {
    array.fill(0);
}

var array = [1, 2, 3, 4];

clear(array);
console.log(array);