如何使用javascript将两个数组的子集放入不同的数组中?

如何使用javascript将两个数组的子集放入不同的数组中?,javascript,arrays,subset,Javascript,Arrays,Subset,我有两个数组 arr1=[1,8,1,3,2] arr2=[3,8,1] 我想将元素[8,1]子集放入arr3。如何使用javascript实现这一点?我使用了以下代码。但似乎不起作用 function subsetFind() { var arr1 = [1,8,1,3,2] var arr2 = [3,8,1] var arr3 = []; var arr1length = arr1.length; var arra2length

我有两个数组

 arr1=[1,8,1,3,2]

 arr2=[3,8,1]
我想将元素
[8,1]
子集放入
arr3
。如何使用javascript实现这一点?我使用了以下代码。但似乎不起作用

function subsetFind() {      
    var arr1 = [1,8,1,3,2]
    var arr2 = [3,8,1]
    var arr3 = [];
    var arr1length = arr1.length;
    var arra2length = arr2.length;

   for(var i = 0; i < arr1length; ++i){
        for(var j=0;j<arra2length;j++) {
            if(arr1[i] != arr2[j]) {
                break;
            } else {
                arr3.push(arr1[i]);
                break;
            }
        }
    }

    alert(arr3);
}
函数subsetFind(){
var arr1=[1,8,1,3,2]
var arr2=[3,8,1]
var arr3=[];
var arr1length=arr1.length;
var arra2length=arr2.length;
对于(变量i=0;i对于(var j=0;j尝试此解决方案-它检查当前值和上一个值或当前值和下一个值是否相等:

function subsetFind() {
    var arr1 = [1,8,1,3,2]
    var arr2 = [3,8,1]
    var arr3 = [];
    var arr1length = arr1.length;
    var arra2length = arr2.length;
    var used_i = 0;
    for(var i = 0; i < arr1length; ++i){
        if(used_i != 0 && used_i < i-1){
            break;
        }
        for(var j=0;j<arra2length;j++) {
            if((arr1[i] == arr2[j] && arr1[i-1] == arr2[j-1]) || (arr1[i] == arr2[j] && arr1[i+1] == arr2[j+1])) {
               arr3.push(arr1[i]);
               used_i = i;
            }
        }
    }

    alert(arr3);
}
我希望你愿意;(续:)

函数子集(){
var arr1=[1,9,3,5,4,8,2,6,3,4]
var arr2=[5,2,4,8,2,6,4]
var arr3=[];
var minSize=2;//交叉点中必须至少有2个元素
var findedMax=“”;
var arr1Joined=“”;arr1.forEach(函数(a){arr1Joined+=”,“+a;});
对于(k=minSize;k请尝试以下方法:

参考n-dru的答案:

function subset () {
        var arr1 = [1,9,3,5,4,8,2,6,3,4]
        var arr2 = [5,2,4,8,2,6,4]
        var arr3 = [];
        var arr1length = arr1.length;
        var arra2length = arr2.length;
        var finalResult;
       for(var i = 0; i < arr1length; ++i){
            for(var j=0;j<arra2length;j++) {
                if((arr1[i] == arr2[j] && arr1[i-1] == arr2[j-1]) || (arr1[i] == arr2[j] && arr1[i+1] == arr2[j+1])) {
                    arr3.push(arr1[i]);

                }
                else
                {
                    finalResult = arr3.toString();
                }
            }
        }

        alert(finalResult);
}
函数子集(){
var arr1=[1,9,3,5,4,8,2,6,3,4]
var arr2=[5,2,4,8,2,6,4]
var arr3=[];
var arr1length=arr1.length;
var arra2length=arr2.length;
var最终结果;
对于(变量i=0;i对于(var j=0;j),我相信您的问题已经在:和中得到了回答。您还可以在Lowdish库中研究u.intersection的实现。

ES6方式

[...new Set(arr1)].filter(v => arr2.includes(v))
细分:

new Set(arr1)                   // convert arr1 to Set to remove duplicates 

[...new Set(arr1)]              // convert back to array

arr2.includes(v)                // test if arr2 includes `v`

[...new Set(arr1)].filter(v => arr2.includes(v))  // choose unique elements in both arrays

为什么
[8,1]
?还有,你说它不工作是什么意思?1,8和3在两个数组中都有。在arr1中它有8,1。在arr2中它也有8,1作为一个模式。我只想在arr3中获得两个元素,你试图在arr3中获得公共值。这可能会有帮助,它为这两个数组提供了正确的答案。但是,请考虑以下数组,这可能会有所帮助不会给出答案。arr1=[1,9,3,5,4,8,2,6,3,4],arr2=[5,2,4,8,2,6,4]。对于arr3,它应该只给出[4,8,2,6]。但它给出[4,8,2,6,4]。你能解决这个问题吗?好的,我编辑了答案-现在它检查
I
是否总是比前面的
I
大1。这也不是我想要的。这给出了答案。但是如果我将第一个数组更改为[1,9,3,5,4,8,2,6,3,4,4,8],那么它也应该给出[4,8,2,6]。但是它给出了[4,8,2,6,8]。根据我的要求,[4,8,2,6,4,8]数组2中没有表示。因此它只有4,8,2,6。所以我只需要那个答案。不。这不是我想要的。这是我想要的。但是你能改进答案以获得更多的结果元素吗。例如,arr1=[1,9,3,5,4,8,2,6,3,4,3,7],arr2=[5,2,4,8,2,6,4,3,7].由于3,7也在两个数组中,因此arr3应包含[4,8,2,6,3,7]。
new Set(arr1)                   // convert arr1 to Set to remove duplicates 

[...new Set(arr1)]              // convert back to array

arr2.includes(v)                // test if arr2 includes `v`

[...new Set(arr1)].filter(v => arr2.includes(v))  // choose unique elements in both arrays