Javascript 如何将数组与数组数组进行比较?

Javascript 如何将数组与数组数组进行比较?,javascript,arrays,underscore.js,lodash,Javascript,Arrays,Underscore.js,Lodash,这是一个尝试在井字游戏应用程序。 我有两个数组playerMoves和winningcombination。像这样。 var playerMoves= [0,1,4]; var winningCombinations = [ [0,1,2],[3,4,5],[6,7,8], [0,3,6],[1,4,7],[2,5,8], [0,4,8],[2,4,6] ]; 我需要过滤winningcomposition数组,使playerMove

这是一个尝试在井字游戏应用程序。 我有两个数组
playerMoves
winningcombination
。像这样。

var playerMoves= [0,1,4];
var winningCombinations = [
        [0,1,2],[3,4,5],[6,7,8],
        [0,3,6],[1,4,7],[2,5,8],
        [0,4,8],[2,4,6]
      ];
我需要过滤
winningcomposition
数组,使
playerMoves
数组的至少两个值与
winningcomposition
中的每个数组匹配

findPossibleMove(playerMoves);
// should return [[0,1,2],[1,4,7], [0,4,8] ]
我的尝试

function findPossibleMove(arr){
  var found = 0;
  return arr.forEach((item)=>{
    winningCombinations.map((obj)=>{
      if(obj.indexOf(item) !== -1) {
        found++;
      }
      if(found===2){
        return obj;
      }        
    })
  })      
}
三个简单步骤:

  • 使用
    indexOf
    函数检查
    winningcombines
    数组子数组中的指定元素是否存在于
    playerMoves
    数组中
  • 如果是-使用
    Array#filter
    功能将其过滤掉
  • 如果返回的过滤子数组的长度等于
    2
    ,则表示出现了两个(不多也不少)元素-它满足我们的条件-使用另一个
    数组#过滤器再次过滤它
let playerMoves=[0,1,4];
设Winning组合=[
[0, 1, 2],
[3, 4, 5],
[6, 7, 8],
[0, 3, 6],
[1, 4, 7],
[2, 5, 8],
[0, 4, 8],
[2, 4, 6],
];
设res=winningcombines.filter(v=>v.filter(c=>{
返回playerMoves.indexOf(c)>-1;
}).长度==2);
log(JSON.stringify(res))您可以使用和来实现:

var playerMoves=[0,1,4];
var Winning组合=[
[0,1,2],[3,4,5],[6,7,8],
[0,3,6],[1,4,7],[2,5,8],
[0,4,8],[2,4,6]
];
var filteredcompositions=winningcombines.filter((组合)=>
组合.filter(x=>playerMoves.includes(x)).length==2);

console.log(过滤组合)
既然我们必须检查每个过滤数组中的长度(匹配项),那么跳过对数组的过滤数组的创建,并
将其减少为多个匹配元素,并直接使用该元素而不是
长度进行检查,怎么样

let playerMoves=[0,1,4];
设Winning组合=[
[0, 1, 2],
[3, 4, 5],
[6, 7, 8],
[0, 3, 6],
[1, 4, 7],
[2, 5, 8],
[0, 4, 8],
[2, 4, 6],
];
设res=winningcombines.filter(a=>a.reduce((r,v)=>r+playerMoves.includes(v),0)==2);
log('匹配数组:',res)