集合交集算法挑战

这是一个关于使用JavaScript创建函数来计算多个数组对等差分的问题。对等差分集合是指只存在于其中一个集合中的元素组成的集合。例如,对于集合A={1,2,3}和B={2,3,4},对等差分结果是{1,4}。函数需要处理多个输入数组,并返回所有只在其中一个数组中的元素。提供的示例展示了不同输入数组的正确输出结果。" 33782415,1478387,autoconf与automake实战指南,"['源码构建', '自动化构建', 'Unix/Linux构建工具', 'C/C++开发', '软件打包']
摘要由CSDN通过智能技术生成

挑战:

参考:对等差分

创建一个函数,接受两个或多个数组,返回所给数组的 对等差分(symmetric difference) (△ or ⊕)数组.

给出两个集合 (如集合 A = {1, 2, 3} 和集合 B = {2, 3, 4}),
而数学术语 “对等差分” 的集合就是指由所有只在两个集合其中之一的元素组成的集合
(A △ B = C = {1, 4}).

对于传入的额外集合 (如 D = {2, 3}),

你应该安装前面原则求前两个集合的结果与新集合的对等差分集合
(C △ D = {1, 4} △ {2, 3} = {1, 2, 3, 4}).

例如:

sym([1, 2, 3], [5, 2, 1, 4])
应该返回 [3, 4, 5].

sym([1, 2, 3], [5, 2, 1, 4])
应该只包含三个元素.

sym([1, 2, 5], [2, 3, 5], [3, 4, 5])
应该返回 [1, 4, 5]

sym([1, 2, 5], [2, 3, 5], [3, 4, 5])
应该只包含三个元素.

sym([1, 1, 2, 5], [2, 2, 3, 5], [3, 4, 5, 5])
应该返回 [1, 4, 5].

sym([1, 1, 2, 5], [2, 2, 3, 5], [3, 4, 5, 5])
应该只包含三个元素.

sym([3, 3, 3, 2, 5], [2, 1, 5, 7], [3, 4, 6, 6], [1, 2, 3])
应该返回 [2, 3, 4, 6, 7].

sym([3, 3, 3, 2, 5], [2, 1, 5, 7], [3, 4, 6, 6], [1, 2, 3])
应该只包含五个元素.

sym([3, 3, 3, 2, 5], [2, 1, 5, 7], [3, 4, 6, 6], [1, 2, 3], [5, 3, 9, 8], [1])
应该返回 [1, 2, 4, 5, 6, 7, 8, 9].

sym([3, 3, 3, 2, 5], [2, 1, 5, 7], [3, 4, 6, 6], [1, 2, 3], [5, 3, 9, 8], [1])
应该只包含八个元素.

答案:

方法描述
Array 对象用于在单个的变量中存储多个值。
from()通过给定的对象中创建一个数组。
arguments 是一个由函数的参数组成的类数组对象。
reduce() 将数组元素计算为一个值(从左到右)。
filter()检测数值元素,并返回符合条件所有元素的数组。
concat()连接两个或更多的数组,并返回结果。
indexOf() 搜索数组中的元素,并返回它所在的位置。
Set()Set 中的元素是唯一的,没有重复的值。去重!!!
new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。
function sym(){
    //把多个数组参数合并成一个数组
    var args = Array.from(arguments);
    args = args.reduce( (arr1, arr2) => {
      var tArr1 = [];
      var tArr2 = [];
      //查找arr1中有,arr2中没有的数
      tArr1 = arr1.filter(i => arr2.indexOf(i) < 0)
      //查找arr2中有,arr1中没有的数
      tArr2 = arr2.filter(i => arr1.indexOf(i) < 0) 
      return tArr1.concat(tArr2);
    }, []);
    //构造一个没有重复值的数组
    return Array.from(new Set(args));
}

sym([1, 2, 3], [5, 2, 1, 4]);

运行结果:

[3,5,4]

在线测试:

集合交集算法挑战 | w3cschool

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值