[英]compare 2d array with 1d array in javascript
var player1=["t1", "t9", "t7", "t8", "t2"];
var player2=["t5", "t3", "t4", "t6"];
var winmoves=[[t1,t2,t3],[t4,t5,t6],[t7,t8,t9],[t1,t4,t7],[t2,t5,t8],[t3,t6,t9],[t1,t5,t9],[t3,t5,t7]];
else if (moves>=3 && moves<=9) {
moves+=1;
if (turn==1) {
var i=0;
turn=2;
x.innerHTML="<img src='x.png'/>";
player1.push(x.id);
while(i<=moves){
if (winmoves[i] in player1) {
alert("player1 wins");
document.getElementById("player1").innerHTML=1;
}
i+=1;
}
}
我在javascript中有1d数组player1和2d数组winmoves,我想检查p中是否存在w [0]的所有值,依此类推,对于w [1],w [2]等。 如果(winmoves[i] in player1)
条件不起作用。 我不知道我是否在写这篇文章。 帮助我,我被困在这里,我该怎么做。
即使进行了这些更改,它也不起作用。
else if (moves>=3 && moves<9) {
moves+=1;
if (turn==1) {
var i=0;
turn=2;
x.innerHTML="<img src='x.png'/>";
player1.push(x.id);
while(i<=moves){
mapped1 = winmoves.map(a1 => a1.every(e1 => player1.includes(e1)));
if (mapped1[i]) {
alert("player1 wins");
document.getElementById("player1").innerHTML=1;
}
i+=1;
}
}
else if (turn==2) {
turn=1;
var i=0;
x.innerHTML="<img src='o.png'/>";
turn=1;
player2.push(x.id);
while(i<=moves)
{
mapped2 = winmoves.map(a => a.every(e => player2.includes(e)));
if (mapped2[i]) {
alert("player2 wins");
document.getElementById("player2").innerHTML=1;
}
i+=1;
}
}
}
我将使用Array.prototype.intersect()
的简单发明来简单地做到这一点,其余就是这么简单的单个内衬。
Array.prototype.intersect = function(a) { return this.filter(e => a.includes(e)); }; var player1 = ["t1","t2","t3","t5","t7"], winmoves = [["t1","t2","t3"],["t4","t5","t6"],["t7","t8","t9"],["t1","t4","t7"],["t2","t5","t8"],["t3","t6","t9"],["t1","t5","t9"],["t3","t5","t7"]]; filtered = winmoves.filter(a => a.intersect(player1).length == a.length); mapped = winmoves.map(a => a.intersect(player1).length == a.length); console.log(filtered); console.log(mapped);
好了,我们有一个通用的Array方法,可以找到两个数组的交集。 (在被调用的数组和作为参数提供的数组之间)基本上是一个过滤器,用于检查第一个数组的每个项目,以查看它是否包含在第二个数组中。 因此,我们过滤掉两个数组中都存在的项。
为了获得过滤后的数组,我们再次利用Array.prototype.filter()
。 这次,我们的第一个数组是winmoves
,其中包括数组,我们将检查每个与player1
数组的交集。 如果交集长度等于winmove
的项的长度,这意味着的所有元素winmove
的项中现有player1
阵列。 因此,我们将该数组项返回给filtered
。
特定于您的情况,而无需使用相交方法,可以使用Array.prototype.every()
,如下所示;
var player1 = ["t1","t2","t3","t5","t7"], winmoves = [["t1","t2","t3"],["t4","t5","t6"],["t7","t8","t9"],["t1","t4","t7"],["t2","t5","t8"],["t3","t6","t9"],["t1","t5","t9"],["t3","t5","t7"]]; filtered = winmoves.filter(a => a.every(e => player1.includes(e))); mapped = winmoves.map(a => a.every(e => player1.includes(e))); console.log(filtered); console.log(mapped);
你能做的就是使用嵌套循环
for(var j = 0, j < elemInP, j++){
int flag = 0;
for(var x = 0, x < elemInWx, x++){
for(var y = 0, y < elemInWy, y++){
if(p[j] == w[x][y]){
flag = 1;
/*There is no need to run this loop once the value has been found*/
break;
}
}
if(flag){
/*If we have found the value no need to keep looking*/
break;
}
}
if(!flag){
print p[j] is not in w;
}
}
这只是比较两个数组的一种方法的一般想法。 该代码的实际语法需要进行编辑才能在JavaScript中工作,因为这只是基本的伪代码。 标志只是一个变量,它保存是否找到该值,并为每个新值重置。 为了提高效率,您可以在设置标志= 1之后进行一次中断/返回,但这是
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.