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

154
Vistas
.splice() elimina el elemento de dos matrices: elimina los duplicados de la matriz

Quiero eliminar duplicados de una matriz, así que escribí código con dos bucles for .

 let MainArray = [{ "name": "banana", "lat": 3, "lng": 3 }, { "name": "apple", "lat": 3, "lng": 3 }, { "name": "car", "lat": 1, "lng": 1 }, { "name": "bike", "lat": 1, "lng": 1 } ]; let ArrayCopy = MainArray; console.log(MainArray.length); console.log(ArrayCopy.length); for (let i = 0; i < MainArray.length; i++) { for (let x = 0; x < ArrayCopy.length; x++) { if ((MainArray[i].name !== ArrayCopy[x].name) && ((MainArray[i].lat === ArrayCopy[x].lat) || (MainArray[i].lng === ArrayCopy[x].lng))) { //some output ArrayCopy.splice(x, 1); } } } console.log(MainArray.length); console.log(ArrayCopy.length);

Quiero evitar que los resultados coincidan dos veces. Por ejemplo:

resultado 1: plátano y manzana

resultado 2: manzana y plátano

Es por eso que quiero empalmar la coincidencia de ArrayCopy.

Antes de que comience el ciclo, la longitud de MainArray y ArrayCopy es 4, pero después del ciclo, la longitud de ambas matrices es 2.

¿Por qué cambia la longitud de MainArray?

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

0

La segunda matriz es el mismo objeto que la matriz original. Para copiar la matriz, debe crear una nueva matriz y agregar la nueva matriz con los elementos de la primera matriz. A continuación, usamos el operador de extensión para llenar una nueva matriz con todos los valores de la matriz principal.

 let MainArray = [{ "name": "banana", "lat": 3, "lng": 3 }, { "name": "apple", "lat": 3, "lng": 3 }, { "name": "car", "lat": 1, "lng": 1 }, { "name": "bike", "lat": 1, "lng": 1 } ]; let ArrayCopy = [...MainArray]; console.log(MainArray.length); console.log(ArrayCopy.length); for (let i = 0; i < MainArray.length; i++) { for (let x = 0; x < ArrayCopy.length; x++) { if ((MainArray[i].name !== ArrayCopy[x].name) && ((MainArray[i].lat === ArrayCopy[x].lat) || (MainArray[i].lng === ArrayCopy[x].lng))) { //some output ArrayCopy.splice(x, 1); } } } console.log(MainArray.length); console.log(ArrayCopy.length);

También puede usar el método de slice para devolver una matriz de todos los elementos sin pasar ningún parámetro.

 const clone = originalArray.slice()
about 4 years ago · Juan Pablo Isaza Denunciar

0

Actualmente, ArrayCopy hace referencia a la misma memoria que MainArray . Como resultado, cambiar ArrayCopy también cambia MainArray (ya que se refieren a lo mismo). Esto generalmente se conoce como "aliasing de puntero" y, a menudo, es la fuente de errores complicados (como ha descubierto).

Aquí hay una analogía que podría ayudar: si Jones tiene un hermano llamado Steve, entonces "el hermano de Jones" y "Steve" se refieren a la misma persona, aunque sean frases diferentes. Si deposita $100 en la cuenta bancaria de "Steve", también acaba de depositar $100 en la cuenta bancaria del "hermano de Jones" (porque son la misma persona).

En general, es mucho más fácil usar funciones que no mutan sus argumentos. Aquí hay una versión de removeDuplicates que produce una nueva matriz. La estrategia es bastante similar a la que usó anteriormente, excepto que asigna y devuelve una nueva matriz:

 function removeDuplicates(xs) { // This is a newly allocated array, which we'll fill with the unique elements from `xs`: const unique = []; for (let x of xs) { if (unique.find(y => y.name === x.name && y.lat === x.lat && y.lng === x.lng)) { // If we've already seen an element that's equal to `x`, continue. continue; } else { // Otherwise, add it to the output array. unique.push(x); } } return unique; }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Las matrices se pasan por referencia. Lo que significa que si cambia la copia, el original también cambiará. si desea un clon de su matriz original, haga esto:

 let MainArray = [{ "name": "banana", "lat": 3, "lng": 3 }, { "name": "apple", "lat": 3, "lng": 3 }, { "name": "car", "lat": 1, "lng": 1 }, { "name": "bike", "lat": 1, "lng": 1 } ]; let ArrayCopy = JSON.parse(JSON.stringify(MainArray)); console.log(MainArray.length); console.log(ArrayCopy.length); for (let i = 0; i < MainArray.length; i++) { for (let x = 0; x < ArrayCopy.length; x++) { if ((MainArray[i].name !== ArrayCopy[x].name) && ((MainArray[i].lat === ArrayCopy[x].lat) || (MainArray[i].lng === ArrayCopy[x].lng))) { //some output ArrayCopy.splice(x, 1); } } } console.log(MainArray.length); console.log(ArrayCopy.length);

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