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

146
Views
.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 answers
Answer question

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 Report

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 Report

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