新插入的值将替换数组中的所有值

时间:2019-08-01 12:29:22

标签: javascript jquery arrays

我正在尝试将参数中的值存储到数组中。不幸的是,当我尝试推送一个值时,它也改变了以前的值。所以最后,它们都具有相同的价值,但不应该。

例如:我按“ 1”。它存储了,但是当我按“ 2”时,它将替换为“ 1”

enter image description here

这是我的代码:

function Add(num) {
  var numArr = [];
  var count= 10;

  for (var i = 0; i < count; i++) {
    numArr.push(num);
  }

  console.log(numArr);
}

5 个答案:

答案 0 :(得分:3)

每当调用函数时,使数组成为全局数组(在函数内部)都会创建一个新数组。当数组是全局的时,不会出现此问题

var numArr = [];
function Add(num) {
  var count = 10;
  for (var i = 0; i < count; i++) {
    numArr.push(num);
  }
  console.log(numArr);
}
Add(11)
Add(112)

答案 1 :(得分:1)

替换上一个值的原因是,每次调用函数时,您都要重新声明数组,var numArr = []中没有值。将此定义移到该函数之外,应该没问题

答案 2 :(得分:0)

var numArr = [];
const Add = (num) => {
  var count= num;
  for (let i = 0; i < count; i++) {
    numArr.push(num);
  }
  return numArr
}

console.log(Add(10))

答案 3 :(得分:0)

问题是因为您在循环的每次迭代中都实例化了数组。简单的解决方法是将数组传递给Add()函数。

function Add(arr, num) {
  var count = 10;
  for (var i = 0; i < count; i++) {
    arr.push(num);
  }
}

var numArr = [];
Add(numArr, 999);
console.log(numArr);

您也可以在函数外部声明数组,但这会将函数逻辑与外部变量联系在一起,从而使函数的要点完全没有意义。

还请注意,该函数本身可以用Array.fill()方法代替,该方法的作用完全相同,但是在IE中不受支持:

var arr = new Array(10);
arr.fill(999);
console.log(arr);

答案 4 :(得分:0)

问题是您在推入新值时创建了新数组。您可以创建全局数组并在其上推入值。

<script>
_glb_arr=[];

$(document).ready(function (){
  Add(1);
  Add(3);
  console.log(_glb_arr);
});

function Add(val){
 _glb_arr.push(val);  
}

</script>