You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript数组拼接问题:如何在click函数中持续向arr数组添加变量?

嘿,这问题我熟!你遇到的核心问题有两个,咱们一步步拆解:

问题出在哪?

  1. 数组每次都被重置为空:你在click函数内部声明了var arr=[],这意味着每次调用click,都会新建一个空数组,之前添加的元素自然就丢了。
  2. concat的用法误解:concat方法不会修改原数组,而是返回一个新数组。如果你只是调用arr.concat(...)却没把新数组赋值回去,原数组根本不会变。

解决方案

首先要让arr成为一个持久化的变量(不要每次调用函数都重新创建),然后用合适的方法追加元素:

方法1:用push(最推荐,高效直接)

push会直接修改原数组,把参数追加进去,而且用剩余参数...args可以兼容任意数量的传入参数(不管你传2个还是3个):

// 把arr放在函数外部,确保每次调用click都用同一个数组
let arr = [];

function click(...args) {
  // 把所有传入的参数一次性push进数组
  arr.push(...args);
  console.log(arr); // 方便查看结果
}

// 测试一下
click(1, 2, 3); // arr变成 [1,2,3]
click(6, 7);    // arr变成 [1,2,3,6,7]

方法2:用concat(适合不想修改原数组的场景)

如果你一定要用concat,记得把返回的新数组重新赋值给arr,同时也要保证arr是外部的持久化变量:

let arr = [];

function click(...args) {
  // 用concat生成新数组,再赋值给arr
  arr = arr.concat(args);
  console.log(arr);
}

// 测试效果和上面一样
click(1,2,3);
click(6,7);

为什么不用原来的a,b,c参数?

因为你调用函数时可能传2个参数(比如6,7),这时候第三个参数c会是undefined,如果直接把a,b,c加进去,数组里会多一个无效的undefined。用...args可以自动收集所有传入的有效参数,更灵活。

内容的提问来源于stack exchange,提问作者AConsumer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:14:25