javascript - 三个数组之间的并集
问题描述
我需要找到传递给函数的三个数组的并集union
。
我花了大约 50 行代码来获得预期的结果。显然,以下代码有效,但现在我想知道做同样工作的最佳方法是什么(以功能和非功能方式)。
function union(...arrays) {
var array1 = arguments[0];
var array2 = arguments[1];
var array3 = arguments[2];
var unique = [];
var intersaction = [];
// find the unique values
for(let i = 0; i < array1.length; i++) {
if( (array2.includes(array1[i]) == false) && (array3.includes(array1[i])) == false ) {
unique.push(array1[i]);
}
}
for(let i = 0; i < array2.length; i++) {
if( (array1.includes(array2[i]) == false) && (array3.includes(array2[i])) == false ) {
unique.push(array2[i]);
}
}
for(let i = 0; i < array3.length; i++) {
if( (array1.includes(array3[i]) == false) && (array2.includes(array3[i])) == false ) {
unique.push(array3[i]);
}
}
// find the intersection
for(let j = 0; j < array1.length; j++) {
if(array2.includes(array1[j]) || array3.includes(array1[j]) ) {
if (intersaction.indexOf(array1[j]) == -1) {
intersaction.push(array1[j]);
}
}
}
for(let j = 0; j < array2.length; j++) {
if(array1.includes(array2[j]) || array3.includes(array2[j]) ) {
if (intersaction.indexOf(array2[j]) == -1) {
intersaction.push(array2[j]);
}
}
}
for(let j = 0; j < array3.length; j++) {
if(array1.includes(array3[j]) || array2.includes(array3[j]) ) {
if (intersaction.indexOf(array3[j]) == -1) {
intersaction.push(array3[j]);
}
}
}
return union = [...intersaction, ...unique];
}
console.log(union([5, 10, 15], [15, 88, 1, 5, 7], [100, 15, 10, 1, 5]));
// should log: [5, 10, 15, 88, 1, 7, 100]
解决方案
使用非常简单的set,
Set 对象允许您存储任何类型的唯一值,无论是原始值还是对象
var a= [5, 10, 15];
var b=[15, 88, 1, 5, 7];
var c=[100, 15, 10, 1, 5];
var result= [...new Set([...a, ...b,...c])];
console.log(result);
推荐阅读
- c - 合并排序算法无法正常运行
- mysql - 如何选择仅将条目与每个用户的最新日期进行比较的 10 个最高分数?
- jasper-reports - MDX 查询结果与 Jasper 结果不同
- c# - 如何自定义 XAML 导航视图窗格的外观
- java - Java:从列表中删除以其他列表中的元素开头的元素
- java - 无法启动 Gradle 守护进程
- api - 如何在 Spring Boot 的 post 调用中使用 @RequestBody 和 @Requestparam
- python - 如何通过单击下载按钮抓取文件下载 - python
- google-cloud-platform - 使用 Terraform 更新正在运行的 Dataflow 管道会导致“已经存在”错误
- javascript - 通过ajax上传图像时未定义的索引“文件”