我的函数需要接受任意数量的列表,然后输出它们的对称差异。 sym([1, 2, 3], [5, 2, 1, 4])
应该返回[3, 5, 4]
而sym([1, 2, 5], [2, 3, 5], [3, 4, 5])
应该返回[1, 4, 5]
。我怎样才能处理未知数量的论点?我以为我可以使用单个变量args
来创建列表列表,但这不起作用。
function isin(num,arra)
{
for (i=0; i<arra.length; i++)
{
if (num == arra[i]){return true;}
}
return false;
}
function sym(args) {
var syms = [];
console.log(args);
for (i=0; i<args.length; i++)
{
var ins = false;
for (j=0; j<args[i].length; j++)
{
for (k=i+1; k < args.length; k++)
{
if(isin(args[i][j], args[k]))
{
ins = true;
}
}
}
if (ins === false)
{
syms.push(args[i][j]);
}
}
return syms;
}
sym([1, 2, 3], [5, 2, 1, 4]);
答案 0 :(得分:1)
使用arguments
,而不是args
你不需要在函数定义中使用它。
(注意:我假设您的其余代码在您实际获得预期传递的内容后仍可正常工作)
这样:
function sym() {
var syms = [];
console.log(arguments);
for (i=0; i<argumentss.length; i++)
{
var ins = false;
for (j=0; j<arguments[i].length; j++)
{
for (k=i+1; k < arguments.length; k++)
{
if(isin(arguments[i][j], arguments[k]))
{
ins = true;
}
}
}
if (ins === false)
{
syms.push(arguments[i][j]);
}
}
return syms;
}
答案 1 :(得分:1)
对于带数字的数组:
function sym() {
var temp = {}, res = [];
for (var q=0; q<arguments.length; ++q) {
for (var w=0; w<arguments[q].length; ++w) {
temp[arguments[q][w]] ^= 1;
}
}
for (var key in temp) {
if (temp[key] === 1) {
res.push(+key);
}
}
return res;
}
console.log(sym([1, 2, 3], [5, 2, 1, 4]), sym([1, 2, 5], [2, 3, 5], [3, 4, 5]))
答案 2 :(得分:1)
Es6介绍rest paramters。您可以使用它而不是参数对象。
function logAllArguments(...args) {
for (var arg of args) {
console.log(arg);
}
}
logAllArguments(1,2,3)
答案 3 :(得分:0)
在每个函数范围内,您都可以访问arguments对象。您传入的任何参数都可以在其中使用。您可以使用Array.prototype.slice.apply(null,arguments)将arguments对象转换为数组,并对其进行迭代。