好的,我知道这个问题有多个答案,但是它们都使用不同的方法,我感到困惑。
目标是创建一个接受两个或多个数组并返回所提供数组的对称差的数组的函数。单个帮助程序功能正常,但是当我尝试整体运行该代码时,该代码将引发错误。
这是我的尝试:
function sym(args) {
let totalArguments = [...args];
var helper = function (arr1, arr2) {
return arr1.filter(item => arr2.indexOf(item) === -1).concat(arr2.filter(item => arr1.indexOf(item) === -1));
}
return totalArguments.reduce(helper);}
sym([1、2、3],[2、3、4])的输入应为[1、4]
答案 0 :(得分:0)
您的代码不起作用,因为您仅使用第一个参数:
T
这采用第一个参数function sym(args) {
let totalArguments = [...args];
,并复制该数组的一个浅表副本-这不会完成任何操作,因为无论如何您都不会进行任何突变。如果要接受可变数量的参数,请使用参数 rest 语法将所有参数收集在数组中:
args
function sym(...totalArguments) {
(无需为减速器提供初始值)
另一种可能更易于阅读和理解的逻辑是遍历所有数组并将其简化为一个对象,该对象跟踪每个数字发生的次数。然后,获取对象的条目,并返回其值为function sym(...totalArguments) {
var helper = function(arr1, arr2) {
return arr1.filter(item => arr2.indexOf(item) === -1).concat(arr2.filter(item => arr1.indexOf(item) === -1));
}
return totalArguments.reduce(helper);
}
console.log(sym([1, 2, 3], [2, 3, 4])) // [1, 4]
console.log(sym([1, 2, 3], [2, 3, 4], [0, 1])) // [0, 4], since 1 was duplicated
的键的数组:
1