我正在尝试将参数中的值存储到数组中。不幸的是,当我尝试推送一个值时,它也改变了以前的值。所以最后,它们都具有相同的价值,但不应该。
例如:我按“ 1”。它存储了,但是当我按“ 2”时,它将替换为“ 1”
这是我的代码:
function Add(num) {
var numArr = [];
var count= 10;
for (var i = 0; i < count; i++) {
numArr.push(num);
}
console.log(numArr);
}
答案 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>