Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

136
Views
filtro de matriz javascript que devuelve la misma matriz

Tengo una matriz de vecinos de un nodo que intento filtrar en función de la propiedad del nodo isVisited. Actualmente está devolviendo la misma matriz y quiero que solo devuelva una matriz que es !isVisited.

 export function getUnvisitedNeighbors(grid, node) { const { row, col } = node; const neighbors = []; if (row < grid.length - 1) neighbors.push(grid[row + 1][col]); if (col < grid[0].length - 1) neighbors.push(grid[row][col + 1]); if (row > 0) neighbors.push(grid[row - 1][col]); if (col > 0) neighbors.push(grid[row][col - 1]); console.log("before"); console.log(neighbors); neighbors.filter(neighbor => !neighbor.isVisited); //returning same array console.log("after") console.log(neighbors); return neighbors; }

registro de la consola: ingrese la descripción de la imagen aquí

cómo creé los nodos:

 function createNode(row, col) { return { isVisited: false, row: row, col: col, startnode: row === START_NODE_ROW && col === START_NODE_COL, endnode: row === END_NODE_ROW && col === END_NODE_COL, distance: Infinity, isWall: false, previousNode: null } }
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

El método filter() crea una nueva matriz con todos los elementos que pasan la prueba implementada por la función proporcionada.

asigna el resultado a tu variable

 neighbors = neighbors.filter(neighbor => !neighbor.isVisited);
about 4 years ago · Juan Pablo Isaza Report

0

Veo que varias personas te han comentado el problema inmediato. También podría considerar cambiar la lógica para que simplemente mapee desde la matriz de cuadrícula donde la distancia desde el nodo es 1 y es Visitado. La única forma de que la distancia sea 1 es si están arriba, abajo, a la derecha o a la izquierda 1 incremento (la diagonal sería sqrt(2)). Podrías escribirlo en una línea, aunque probablemente escribiría una fórmula de distancia. Puede eliminar algunas líneas y también evitar los controles para ver si sus números están dentro de los límites.

 const node = {row: 4, col: 10}; //const {row, col} = node; const grid = [ {isVisited: true, row: 3, col: 9 }, {isVisited: false, row: 3, col: 10}, {isVisited: true, row: 4, col: 9 }, {isVisited: false, row: 4, col: 11}, {isVisited: true, row: 5, col: 10}, {isVisited: true, row: 5, col: 11} ]; const dist=(n,r,c)=>{return Math.abs(Math.sqrt(Math.pow(n.row-r, 2)+Math.pow(n.col-c, 2)))} let neighbors = grid.filter( function(e) {return e.isVisited && dist(e, this.row, this.col) == 1; }, node); console.log(neighbors);

La fórmula de la distancia parece un poco tosca, pero es la misma fórmula de la geometría de la escuela secundaria:

ingrese la descripción de la imagen aquí

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!