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

116
Views
verificar si el objeto de matriz no contiene un objeto

Acabo de empezar a aprender javascript hoy y estoy tratando de verificar un objeto de matriz para verificar si la matriz NO contiene un objeto.

Para un ejemplo, estoy tratando de verificar si data2 no contiene data1 .

 let data1 = [{ x: 6232, y: 10536, type: "data4", dead: 0, uid: 3832864 }]; let data2 = [ { x: 6352, y: 10656, type: "data1", dead: 0, uid: 3832861 }, { x: 6322, y: 10546, type: "data2", dead: 0, uid: 3832862 }, { x: 6542, y: 15356, type: "data3", dead: 0, uid: 3832863 } ]; let check = Object.entries(data2).find(([key, value]) => value.uid != data1[0].uid); console.log(check); // Expected output to be fales.

Si alguien pudiera ayudarme o señalarme en la dirección correcta, realmente lo agradecería.

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Debe comparar ( === ) el resultado de find con !undefined .

Editar: no necesita llamar a las entries en una matriz.

 const data1 = [{ x: 6232, y: 10536, type: "data4", dead: 0, uid: 3832864 }]; const data2 = [ { x: 6352, y: 10656, type: "data1", dead: 0, uid: 3832861 }, { x: 6322, y: 10546, type: "data2", dead: 0, uid: 3832862 }, { x: 6542, y: 15356, type: "data3", dead: 0, uid: 3832863 } ]; const check = data2.find(value => value.uid === data1[0].uid) !== undefined; console.log(check); // false

Como otros han notado, puede hacer un cortocircuito con some . Aquí hay una versión optimizada:

 /** * Detrmines if an object exists within an array of object * @param {Object[]} arr - An array of object to search * @param {Object} obj - An object to search for * @param {Function} fn - A pluck function used for comparing * @return {Boolean} Returns true if the item exists */ const contains = (arr, obj, fn) => (res => arr.some(e => fn(e) === res)) // Compare (fn(obj)); // Pre-calculate as `res` const data1 = [{ x: 6232, y: 10536, type: "data4", dead: 0, uid: 3832864 }]; const data2 = [ { x: 6352, y: 10656, type: "data1", dead: 0, uid: 3832861 }, { x: 6322, y: 10546, type: "data2", dead: 0, uid: 3832862 }, { x: 6542, y: 15356, type: "data3", dead: 0, uid: 3832863 } ]; const [obj] = data1; // Destructure first item console.log(contains(data2, obj, ({ uid }) => uid)); // false console.log(contains(data2, { uid: 3832862 }, ({ uid }) => uid)); // true

about 4 years ago · Juan Pablo Isaza Report

0

La forma en que aborda este problema está bien, y la otra respuesta lo ayudará a solucionarlo. Pero se supone que esto se resuelve idealmente como una matriz. Con Object.entries() está obteniendo los objetos de la matriz y los índices como valores y claves, respectivamente. Luego iteras sobre ellos.

Puede notar que ni siquiera está usando la variable clave.

No es necesario hacer todo esto ya que ya tiene una matriz .

Puede usar .some() , que devuelve verdadero/falso en función de una condición que cumple incluso uno de los elementos de la matriz. Exactamente lo que necesitas.

 let data1 = [{ x: 6232, y: 10536, type: "data4", dead: 0, uid: 3832864 }]; let data2 = [ { x: 6352, y: 10656, type: "data1", dead: 0, uid: 3832861 }, { x: 6322, y: 10546, type: "data2", dead: 0, uid: 3832862 }, { x: 6542, y: 15356, type: "data3", dead: 0, uid: 3832863 } ]; let check = data2.some(x => x.uid === data1[0].uid); console.log(check); // Expected output to be fales.

about 4 years ago · Juan Pablo Isaza Report

0

Tiene algunos errores de sintaxis en su código anterior. data2 es una matriz de objetos, por lo que no necesita hacer Object.entries() para obtener los elementos de la matriz. Usaría el método Array.some() aquí para que devuelva un valor booleano en lugar del elemento de datos real si espera tener un valor verdadero o falso registrado. el método Array.some() solo regresa una vez que un caso es verdadero y no tenemos que revisar todas las entradas en la matriz de objetos si ya encontramos una coincidencia.

 let data1 = [{ x: 6232, y: 10536, type: "data4", dead: 0, uid: 3832864 }]; let data2 = [ { x: 6352, y: 10656, type: "data1", dead: 0, uid: 3832861 }, { x: 6322, y: 10546, type: "data2", dead: 0, uid: 3832862 }, { x: 6542, y: 15356, type: "data3", dead: 0, uid: 3832863 }, { x: 6232, y: 10536, type: "data4", dead: 0, uid: 3832864 } ]; let check = data2.some(entry => entry.uid == data1[0].uid); console.log(check); // Expected output to be true.

Si no tuviera una identificación única para cada entrada, una forma rápida y sucia de hacerlo sería clasificar ambos objetos y luego comparar las cadenas. Esto tiene sus limitaciones porque el orden de los campos en su objeto debe ser el mismo.

 var object = { 'a': 1, 'b':2}; var other = { 'a': 1, 'b':2 }; console.log(JSON.stringify(object) == JSON.stringify(other)); //this will print true

Para una comparación profunda de objetos, me gusta usar el método isequal de lodash

 var object = { 'a': 1, 'b':2}; var other = { 'b':2, 'a': 1 }; console.log(JSON.stringify(object) == JSON.stringify(other)); //this will print false console.log(_.isEqual(object, other)); //this will print true

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!