Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

220
Vistas
Cómo encontrar el índice que se insertará en una matriz de matriz

Cómo encontrar el índice que se insertará en la matriz de objetos.

Tengo una matriz de Object.

 var cordinate = [ [225, 242], [405, 242], [585, 242], [765, 242], [225, 325], [405, 325], [585, 325], [765, 325], [225, 408], [405, 408], [585, 408], [765, 408] ]

Aquí quiero que se inserte el elemento más cercano

matriz que quiero insertar

 var extraEle = [404, 260]

Cómo determinar el índice exacto para el extraEle en cordinate.

Esto es lo que estoy tratando

Estoy comparando y cordinate para obtener el rango más cercano y luego comparo x cordinate con solo y range para obtener el índice.

 var yValue = []; var diffVal = cordinate[0][1]; for(var i=0; i<cordinate.length;i++){ if (Math.abs(extraEle[1] - diffVal) > Math.abs(extraEle[1]- cordinate[i][1])){ diffVal = componentsPos[i][1]; } } var index; yvalue = []; for(var i=0; i<cordinate.length;i++){ if (cordinate[i][1] === diffVal){ yvalue.push(componentsPos[i]); } } var diffValX = yvalue[0][0]; for(var i=0; i<yvalue.length;i++){ if (Math.abs(extraEle[0] - diffValX) > Math.abs(extraEle[0]- yvalue[i][0])){ diffValX = yvalue[i][0]; } } var indexValue = [diffValX,diffVal] cordinate.indexOf(indexValue, 0)

¿Podemos tener algo incorporado o mejor enfoque que esto? Nota: este código es un código de trabajo.

La salida en mi caso será 2 porque 260 ( Y ) estará en el rango de los primeros 4 elementos y 404 ( X ) vendrá antes del tercer elemento.

Después de agregar mi cordinado debería ser como.

 cordinate = [ [225, 242], [405, 242], [404, 260], [585, 242], [765, 242], [225, 325], [405, 325], [585, 325], [765, 325], [225, 408], [405, 408], [585, 408], [765, 408] ]

Pero precisamente necesito solo el índice donde puedo insertar.

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Puede que esta no sea la solución más elegante, pero determinará la coordenada más cercana, calculando la distancia entre los puntos y determinando el más cercano, luego puede splice en la matriz.

 // Input coordinates let coordinates = [ [225, 242], [405, 242], [585, 242], [765, 242], [225, 325], [405, 325], [585, 325], [765, 325], [225, 408], [405, 408], [585, 408], [765, 408] ]; // Add this to the array let extraEle = [404, 260]; getClosestIndex(coordinates, extraEle).then((result) => { coordinates.splice(result, 0, extraEle); console.log(coordinates); // Output /*[ [225, 242], [405, 242], [404, 260] [585, 242], [765, 242], [225, 325], [405, 325], [585, 325], [765, 325], [225, 408], [405, 408], [585, 408], [765, 408] ]; */ }); function getClosestIndex(coords, targetCoords) { return new Promise((resolve, reject) => { let shortestDist = 999999999; let shortestIndex = 0; coords.forEach((coord, index) => { let dist = Math.sqrt( Math.pow((coord[0]-targetCoords[0]), 2) + Math.pow((coord[1]-targetCoords[1]), 2)); if (dist < shortestDist) { shortestDist = dist; shortestIndex = index; } }); // To add it after the closest element if (shortestIndex < coords.length - 1) shortestIndex += 1; resolve(shortestIndex); }); }

about 4 years ago · Juan Pablo Isaza Denunciar

0

La lógica según entiendo es:

Encuentre los subconjuntos que tienen el valor más cercano de y y luego X con mayor precisión. Nota: el ejemplo de salida deseada de OP es incorrecto:

 [405, 242], [404, 260], [585, 242],...

[404, 260] debe colocarse antes de [405, 242] .

En el siguiente ejemplo:

  • Se crean 2 matrices de matrices a partir de los valores x e y.
 [[x, (x - 404)],...] and [[y, (y - 260)],...]

Luego, cada subarreglo se ordena por índice 1 y de eso derivamos el más cercano [x, y]

 let coords = [[225,242],[405,242],[585,242],[765,242],[225,325],[405,325],[585,325],[765,325],[225,408],[405,408],[585,408],[765,408]]; let add = [404, 260]; const findRange = (array, xy) => { let xArr = []; let yArr = []; for (let sub of array) { xArr.push([sub[0], Math.abs(xy[0] - sub[0])]); yArr.push([sub[1], Math.abs(xy[1] - sub[1])]); } let xRng = xArr.sort((a, b) => a[1] - b[1]); let yRng = yArr.sort((a, b) => a[1] - b[1]); let X = xRng[0][0]; let Y = yRng[0][0]; let closest = [X, Y]; let idx = array.flatMap((s, i) => closest[0] === s[0] && closest[1] === s[1] ? i : []); if (X >= xy[0]) { array.splice(idx, 0, xy); } else { array.splice(idx+1, 0, xy); } return array; }; console.log(findRange(coords, add));

about 4 years ago · Juan Pablo Isaza Denunciar

0

Aquí hay una solución divertida.

Dada una función simple que encuentra el valor más cercano en una matriz, encuentre el valor Y más cercano. Luego, todo lo que tiene que hacer es agregar la nueva coordenada a la matriz y ordenar por columna Y y luego X. Al ordenar la nueva coordenada, trate su valor Y como el valor Y más cercano.

 let coords = [[225,242],[405,242],[585,242],[765,242],[225,325],[405,325],[585,325],[765,325],[225,408],[405,408],[585,408],[765,408]]; let add = [404, 260]; const closestValue = (array, goal) => array.reduce((prev, curr) => Math.abs(curr - goal) < Math.abs(prev - goal) ? curr : prev); let nearestY = closestValue(coords.map(c => c[1]), add[1]); coords.push(add); coords.sort(function([a, b], [c, d]) { if(b === add[1]){ b = nearestY; } else if(d === add[1]){ d = nearestY; } return b - d || a - c }); console.log(coords);

Creo que el tipo se puede mejorar.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda