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

221
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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