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

JavaScript中如何在未知参数数量的情况下向函数传递多个参数?

解决可变参数的数组合并去重问题

你找的方向完全没错!arguments对象就是处理这种参数数量不确定场景的绝佳方案——不管你定义函数时声明了几个形参,它都会自动收集调用时传入的所有参数。

先理解arguments的工作方式

你测试的这段代码:

function uniteUnique() { console.log(arguments) }
uniteUnique([1, 3, 2], [5, 2, 1, 4], [2, 1])

控制台输出的{ '0': [1, 3, 2], '1': [5, 2, 1, 4], '2': [2, 1] }就是arguments的结构:它是一个类数组对象,通过索引就能访问到每个传入的数组参数。

完整实现uniteUnique函数

基于这个思路,我们可以写出满足需求的完整函数——合并所有传入的数组,同时去除重复元素:

function uniteUnique() {
  // 把类数组的arguments转换成真正的数组
  const argsArray = Array.from(arguments);
  // 合并所有子数组为一个一维数组
  const mergedArray = argsArray.flat();
  // 利用Set的唯一性去重,再转回数组
  return [...new Set(mergedArray)];
}

// 测试示例
console.log(uniteUnique([1, 3, 2], [5, 2, 1, 4], [2, 1])); // 输出: [1, 3, 2, 5, 4]

ES6更优雅的替代方案:剩余参数

如果你用的是ES6及以上的环境,更推荐用剩余参数语法(...args),它直接把所有传入的参数收集成一个真正的数组,写法更直观,可读性更强:

function uniteUnique(...args) {
  const mergedArray = args.flat();
  return [...new Set(mergedArray)];
}

甚至可以写成更简洁的箭头函数版本:

const uniteUnique = (...args) => [...new Set(args.flat())];

额外注意事项

  • arguments是类数组对象,必须先转换成真正的数组(比如用Array.from()或Array.prototype.slice.call(arguments))才能使用flat()这类数组方法。
  • 如果你的参数里有多层嵌套的数组,可以给flat()传入Infinity来完全展开:argsArray.flat(Infinity)。

内容的提问来源于stack exchange,提问作者Chris H.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 12:33:14