2017-07-17 173 views
13

這是一個tic tac toe遊戲應用程序的嘗試。 我有兩個陣列playerMoveswinningCombinations。喜歡這個。
如何將數組與數組進行比較?

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] 
     ]; 

我需要將winningCombination陣列,使得在-至少和在最playerMoves陣列的兩個值與winningCombination每個陣列匹配濾波器。

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; 
     }   
    }) 
    })  
} 

回答

9

三個簡單的步驟:

  • 使用indexOf函數來檢查,如果來自winningCombinations陣列的子陣列指定的元素存在於playerMoves陣列英寸
  • 如果是這樣 - 用Array#filter函數進行過濾。
  • 如果返回的過濾子數組的長度等於2,這意味着出現了兩個(不多也不少)元素 - 它符合我們的條件 - 再次用另一個Array#filter進行過濾。

let playerMoves = [0, 1, 4]; 
 
let 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], 
 
]; 
 

 
let res = winningCombinations.filter(v => v.filter(c => { 
 
    return playerMoves.indexOf(c) > -1; 
 
}).length == 2); 
 
    
 
    console.log(JSON.stringify(res));

2

您可以使用filterincludes以達到:

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] 
 
]; 
 

 
var filteredCombinations = winningCombinations.filter((combination) => 
 
    combination.filter(x => playerMoves.includes(x)).length === 2); 
 

 
console.log(filteredCombinations);

0

,因爲我們要檢查,長度(匹配項)在每個過濾的數組中,如何跳過對陣列的過濾數組創建和reducing它到一些匹配的元素,並直接檢查,而不是length

let playerMoves = [0, 1, 4]; 
 
let 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], 
 
]; 
 
let res = winningCombinations.filter(a=> a.reduce((r, v) => r + playerMoves.includes(v), 0)==2); 
 

 
console.log('matching array: ', res)

相關問題