【发布时间】:2016-04-14 11:15:32
【问题描述】:
我在尝试查找包含两个或多个数组的对称差的数组时创建了这个 codepen http://codepen.io/PiotrBerebecki/pen/ZWxvzm。
我的函数可以正常工作,但前提是传递了四个参数。如何修改我的函数以使其可以接受未知数量的参数?有一个潜在可重复的代码块可能是 for 循环或 reduce / map 方法的一部分。我不知道如何做到这一点。
symmetricDifference([1,2,3,4], [3,4,5,6], [2,4,6,7], [8,9])
// should return an array containing [1,4,5,7,8,9]
symmetricDifference([1,2,3,4], [3,4,5,6])
// should return an array containing [1,2,5,6]
var arrA = [1,2,3,4];
var arrB = [3,4,5,6];
var arrC = [2,4,6,7];
var arrD = [8,9];
function symmetricDifference(arr) {
let args = Array.prototype.slice.call(arguments);
let result = [];
result = args[0].concat(args[1]).filter(function(item) {
return args[0].indexOf(item) === -1 || args[1].indexOf(item) === -1;
});
result = result.concat(args[2]).filter(function(item) {
return result.indexOf(item) === -1 || args[2].indexOf(item) === -1;
});
result = result.concat(args[3]).filter(function(item) {
return result.indexOf(item) === -1 || args[3].indexOf(item) === -1;
});
return result;
}
【问题讨论】:
-
是的,在
args上使用简单的for循环。如果您没有成功,请向我们展示您的尝试。 -
提示:以
var result = args[0];开头 -
总是四人一组吗?将您的参数分成四组,然后循环这些组,选择组中的四个元素中的每一个,就像您在示例中一样。
-
@Bergi 我已经实现了您的提示,并且该功能按要求工作。
标签: javascript function for-loop filter reduce