JavaScript数组拼接问题:如何在click函数中持续向arr数组添加变量?
嘿,这问题我熟!你遇到的核心问题有两个,咱们一步步拆解:
问题出在哪?
- 数组每次都被重置为空:你在
click函数内部声明了var arr=[],这意味着每次调用click,都会新建一个空数组,之前添加的元素自然就丢了。 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
相关产品推荐
相关产品推荐

