Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

419
Visualizações
Tick Tack Toe: filtro de matriz multidimensional en JavaScript

Estoy aprendiendo a filtrar arreglos anidados en javascript y creo que este ejemplo me puede ayudar a entenderlo mejor. debajo está el objeto.

 const game = () => { return { player1: { username: 'ABC', playingAs: 'X' }, player2: { username: 'XYZ', playingAs: '0' }, board: [ ['✓', null, 'X'], ['X', '✓', null], ['✓', null, 'X'] ] } };

mi código está abajo

 const {player1: {username: PlayerA, playingAs:PlayerAMark}, player2: {username: PlayerB, playingAs:PlayerBMark}} = game(); const {board: board} = game(); //is there any efficient way to do it without a loop using a filter? for (const item in board) { //One approach which comes to my mind is to loop. but that is what I don't think would be a learning curve for me. }

estoy intentando algo como esto

 const array = board; for (const item in board) { console.log(array.filter(innerArray => innerArray[item] !== 'X')); }

Estoy enfocado en implementar alguna forma eficiente que pueda ayudarme a regresar

 Player1 marked 'X' at 3,1,3 and Player 2 marked '0' at location at 0,2,1

Solo estoy atascado con el filtrado de esta matriz multidimensional de la placa.

Aprecio tu ayuda en esto.

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

También puede utilizar la función reduce . Podemos tener la salida deseada usando este código:

 function printForPlayer(player, board) { var indexes = board.reduce((acc,row)=>[...row.reduce((acc2,item,index) => item==player.playingAs ? [...acc2,index+1] : acc2, []),...acc], []) console.log(`${player.username} marked ${player.playingAs} at ${indexes.join(',')}`) } printForPlayer(game().player1, game().board); printForPlayer(game().player2, game().board);

esto es un poco complejo, pero funciona sin bucle

about 4 years ago · Juan Pablo Isaza Relatório

0

Una forma es recorrer cada fila para crear una matriz con todos los lugares donde el jugador tiene su propio símbolo.

Usando reduce() , podemos encontrar todos los índices del symobl del reproductor actual, luego, después del bucle, use join() para mostrarlo.

 const data = {player1: {username: 'ABC', playingAs: 'X'}, player2: {username: 'XYZ', playingAs: '0'}, board: [['0', null, 'X'], ['X', '0', null], ['0', null, 'X'] ] }; const logPlayer = (player) => { const ox = data[player].playingAs; let indexes = []; for (let row in data.board) { const ii = data.board[row].reduce((prev, cur, i) => (cur === ox) ? [ ...prev, i ] : prev,[]); if (ii.length > 0) ii.map(i => indexes.push(`${+row + 1}-${i + 1}`)); } console.log(`${player} has placed an '${ox}' on the following places (row-column)`, indexes.join(", ")); } logPlayer('player1'); logPlayer('player2');

 player1 has placed an 'X' on the following places (row-column) 1-3, 2-1, 3-3 player2 has placed an '0' on the following places (row-column) 1-1, 2-2, 3-1
about 4 years ago · Juan Pablo Isaza Relatório

0

Así que aquí está mi solución que funcionó para mí.

En primer lugar, null siempre se representa como 0. Así que tuve que actualizar mi matriz como se menciona a continuación.

 board: [ ['✓', null, 'X'], ['X', '✓', null], ['✓', null, 'X'] ]

En segundo lugar, después de actualizar el valor del tablero en la matriz, la siguiente solución me funcionó.

 const { player1: {username: PlayerA, playingAs:PlayerAMark}, player2: {username: PlayerB, playingAs:PlayerBMark}, board: GameBoard } = game(); let array = GameBoard.entries(); let tick = []; let cross = []; for (const [index,element] of array) { tick.push(element.indexOf(PlayerBMark)+ 1); cross.push(element.indexOf(PlayerAMark)+ 1); } console.log('Player ', PlayerA, ' Clicked ', PlayerAMark ,' at '+ cross); console.log('Player ',PlayerB, ' Clicked ', PlayerBMark ,' at '+ tick);

Aquí está el resultado de esto.

 Player ABC Clicked X at 3,1,3 Player XYZ Clicked ✓ at 1,2,1

Gracias a todos por toda la ayuda. Pero, todavía estoy buscando ¿Cómo podemos mejorar su rendimiento y evitar bucles?

Gracias de nuevo.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda