当前位置: 首页 > 知识库问答 >
问题:

三个数组并集

程钧
2023-03-14

我需要找到传递给函数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]

共有1个答案

澹台庆
2023-03-14

使用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);
 类似资料:
  • 问题内容: 我有两个像这样的数组: 我想结合这两个数组,使其不包含重复项,并保留其原始键。例如,输出应为: 我已经尝试过了,但是它正在更改其原始键: 有什么办法吗? 问题答案: 只需使用: 那应该解决。因为如果一个键出现多次(例如在您的示例中),则使用字符串键,因此一个键将覆盖具有相同名称的处理键。因为在您的情况下,它们两者都具有相同的值,但这无关紧要,并且还会删除重复项。 更新:我刚刚意识到,P

  • 想象我们有两个数组: 获取包含两者相乘值的第三个String数组的更好方法是什么?比如: 我知道,我可以使用循环并将1中的每个元素与2中的每个元素连接起来,并将结果放入3中。但实际上和中的元素要多得多。Java中是否有专门的工具使其更有效?

  • 问题内容: 我有两个数组,我想将这两个数组合并为一个数组。请查看以下详细信息: 第一个数组: 第二个数组: 我想要这个结果。有人知道该怎么做吗? 希望你理解这个问题。先感谢您。 问题答案: 已修正 (再次) 接受无限数量的输入数组,将所有子数组作为索引数组合并到一个容器中,然后返回结果。 编辑03/2014: 提高可读性和效率

  • 问题内容: 假设我有三个任意的一维数组,例如: 这三个数组代表3D网格中的采样间隔,我想为所有相交构造一个三维矢量的一维数组,例如 订单实际上对此并不重要。生成它们的明显方法是: 所以问题是…有没有更快的方法?我看过但没有找到(可能只是找不到正确的Google关键字)。 我目前正在使用此: 但是我感觉好像错过了一些聪明的幻想的Numpy方式吗? 问题答案: 要在上述示例中使用numpy网格,将可以

  • 问题内容: 我有两个像 我希望它们合并成单个数组 问题答案: 您需要该方法。

  • 问题内容: 我有2个数组 我是否可以将这些单独的数组合并为一个并将这些值相加,以便结果为: 这是我目前拥有的功能,但我似乎无法使其工作: 问题答案: 可以用两行代码完成此实际计算,而无需循环: http://codepad.viper-7.com/ieSkHQ 您只需要进行适当的调整即可解决您的嵌套结构。