Javascript 将数字数组与';数字数组的数组';查找匹配项

Javascript 将数字数组与';数字数组的数组';查找匹配项,javascript,jquery,arrays,loops,Javascript,Jquery,Arrays,Loops,我正在尝试一些我以前从未尝试过的事情,我在寻找解决方案时遇到了困难(希望我没有尝试不可能的事情!) 我有一个数组,包含24个单独的数组,每个数组包含4个数值 var arrayOfArrays = [ [ 0, 7, 14, 21 ], [ 1, 8, 15, 22 ], [ 2, 9, 16, 23 ], [ 6, 13, 20, 27 ] and so on for 24 arrays. 我还有一个空数组,它在单击事件时将一个新的数字推入其中。每次单击都会添

我正在尝试一些我以前从未尝试过的事情,我在寻找解决方案时遇到了困难(希望我没有尝试不可能的事情!)

我有一个数组,包含24个单独的数组,每个数组包含4个数值

var arrayOfArrays = [
    [ 0, 7, 14, 21 ],
    [ 1, 8, 15, 22 ],
    [ 2, 9, 16, 23 ],
    [ 6, 13, 20, 27 ] and so on for 24 arrays.
我还有一个空数组,它在单击事件时将一个新的数字推入其中。每次单击都会添加一个新编号,即

var userGeneratedArray = []
- click
[7]
- click
[7, 32]
-click
[7, 32, 14]
-click
[7, 32, 14, 24]
-click
[7, 32, 14, 24, 34]
等等

我想做的是:

1) 每次向UserGenerateArray添加一个新的数字时,我都想循环ArrayOfarray并比较数字

2) 一旦UserGenerateArray中的任意四个数字与ArrayOfarray中任意数组中的所有数字匹配,则返回true

你知道如何构建这个循环吗?任何帮助都将不胜感激:)

这是我的完整数组

    var arrayOfArrays = [
        [ 0, 7, 14, 21 ],
        [ 1, 8, 15, 22 ],
        [ 2, 9, 16, 23 ],
        [ 6, 13, 20, 27 ],

        [ 7, 14, 21, 28 ],
        [ 8, 15, 22, 29 ],
        [ 12, 19, 26, 33 ],
        [ 14, 21, 28, 35 ],

        [ 18, 25, 32, 39 ],
        [ 19, 26, 33, 40 ],
        [ 20, 27, 34, 41 ],
        [ 36, 31, 26, 21 ],

        [ 37, 32, 27, 22 ],
        [ 38, 33, 28, 23 ],
        [ 30, 25, 20, 15 ],
        [ 31, 26, 21, 16 ],

        [ 32, 27, 22, 17 ],
        [ 24, 19, 13, 9 ],
        [ 25, 20, 15, 10 ],
        [ 26, 21, 16, 11 ],

        [ 18, 13, 8, 3 ],
        [ 19, 14, 9, 4 ],
        [ 20, 15, 10, 5 ],
        [ 13, 20, 27, 34 ]
    ];
var arrayOfArrays=[
[ 0, 7, 14, 21 ],
[ 1, 8, 15, 22 ],
[ 2, 9, 16, 23 ],
[ 6, 13, 20, 27 ],
[ 7, 14, 21, 28 ],
[ 8, 15, 22, 29 ],
[ 12, 19, 26, 33 ],
[ 14, 21, 28, 35 ],
[ 18, 25, 32, 39 ],
[ 19, 26, 33, 40 ],
[ 20, 27, 34, 41 ],
[ 36, 31, 26, 21 ],
[ 37, 32, 27, 22 ],
[ 38, 33, 28, 23 ],
[ 30, 25, 20, 15 ],
[ 31, 26, 21, 16 ],
[ 32, 27, 22, 17 ],
[ 24, 19, 13, 9 ],
[ 25, 20, 15, 10 ],
[ 26, 21, 16, 11 ],
[ 18, 13, 8, 3 ],
[ 19, 14, 9, 4 ],
[ 20, 15, 10, 5 ],
[ 13, 20, 27, 34 ]
];
新数组=[];
var noMatch=false;
var addedNumber=[];
函数addNumber(){
if(noMatch | | addedNumber.length==4){
返回;
}
让值=document.querySelector('input')。值;
如果(值){
添加数字。推送(值);
document.querySelector('span').textContent=[…addedNumber];
value=parseInt(值);
if(newArrays.length==0){
newArrays=arrayOfArrays.filter(数组=>{
返回数组.some(item=>item==value);
});
}否则{
newArrays=newArrays.filter(数组=>{
返回数组.some(item=>item==value);
});
}
document.querySelector('input')。值='';
if(addedNumbers.length==4&&newArrays.length>0){
警报(“找到匹配项”);
}
if(newArrays.length==0){
noMatch=true;
警报(“未找到匹配项”);
}
log(newArrays);
}
}

添加数字
var arrayOfArrays=[
[ 0, 7, 14, 21 ],
[ 1, 8, 15, 22 ],
[ 2, 9, 16, 23 ],
[ 6, 13, 20, 27 ],
[ 7, 14, 21, 28 ],
[ 8, 15, 22, 29 ],
[ 12, 19, 26, 33 ],
[ 14, 21, 28, 35 ],
[ 18, 25, 32, 39 ],
[ 19, 26, 33, 40 ],
[ 20, 27, 34, 41 ],
[ 36, 31, 26, 21 ],
[ 37, 32, 27, 22 ],
[ 38, 33, 28, 23 ],
[ 30, 25, 20, 15 ],
[ 31, 26, 21, 16 ],
[ 32, 27, 22, 17 ],
[ 24, 19, 13, 9 ],
[ 25, 20, 15, 10 ],
[ 26, 21, 16, 11 ],
[ 18, 13, 8, 3 ],
[ 19, 14, 9, 4 ],
[ 20, 15, 10, 5 ],
[ 13, 20, 27, 34 ]
];
新数组=[];
var noMatch=false;
var addedNumber=[];
函数addNumber(){
if(noMatch | | addedNumber.length==4){
返回;
}
让值=document.querySelector('input')。值;
如果(值){
添加数字。推送(值);
document.querySelector('span').textContent=[…addedNumber];
value=parseInt(值);
if(newArrays.length==0){
newArrays=arrayOfArrays.filter(数组=>{
返回数组.some(item=>item==value);
});
}否则{
newArrays=newArrays.filter(数组=>{
返回数组.some(item=>item==value);
});
}
document.querySelector('input')。值='';
if(addedNumbers.length==4&&newArrays.length>0){
警报(“找到匹配项”);
}
if(newArrays.length==0){
noMatch=true;
警报(“未找到匹配项”);
}
log(newArrays);
}
}

添加数字

您可以创建一个数据结构,该结构有效地标识出现选定数字的阵列(避免反复搜索):将每个可选数字映射到包含该数字的阵列对象列表。为每个这样的对象添加一个计数器,以跟踪是否选中了所有对象

下面是它的样子。我添加了可以选择数字的按钮:

const arrayOfArrays=[[0,7,14,21]、[1,8,15,22]、[2,9,16,23]、[6,13,20,27]、[7,14,21,28]、[8,15,22,29]、[12,19,26,33]、[14,21,28,35]、[18,25,32,39]、[19,26,33,40]、[20,27,34,41]、[36,31,26,21]、[37,32,27,22]、[38,33,28,23]、[30,25,20,15]、[31,26,22]、[22],[ 24, 19, 13, 9 ],[ 25, 20, 15, 10 ],[ 26, 21, 16, 11 ],[ 18, 13, 8, 3 ],[ 19, 14, 9, 4 ],[ 20, 15, 10, 5 ],[ 13, 20, 27, 34 ]];
//创建有效的数据结构以计算选择数
const numberToCounters=Array.from({length:42},()=>[]);
arrayOfArrays.map((arr)=>({arr,所选:0}))
.forEach(counter=>counter.arr.forEach(k=>
numberToCounters[k]。推送(计数器))
);
//函数处理一个选择并查看是否有4个相同的数组
const select=num=>
numberToCounters[num].find(计数器=>++counter.selected==counter.arr.length);
//I/O处理

对于(让k=0;k,您可以创建一个数据结构,有效地标识出现选定数字的数组(避免反复搜索):将每个可选数字映射到包含该数字的数组对象列表。为每个此类对象添加一个计数器,以跟踪是否全部选中