如何使用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