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

237
Visualizações
Cómo comparar varios objetos (necesita hacer coincidir el valor de algunas claves)

Tengo una variedad de objetos.

 let filterval = [ { 'tran_type': "cs+", 'date': 2/2/2022, 'amount' 10000 }, { 'tran_type': "cs-", 'date': 2/2/2022, 'amount' 10000 }, { 'tran_type':"cs+", 'date': 3/2/2022, 'amount' 20000 }, { 'tran_type': "opo", 'date': 2/2/2022, 'amount' 10000 },{ 'tran_type': "opi", 'date': 2/2/2022, 'amount' 10000 },{ 'tran_type': "cs+", 'date': 1/2/2022, 'amount' 70000 }, { 'tran_type': "opo", 'date': 1/2/2022, 'amount' 90000 } ]

Necesito omitir el objeto si tran_type es cs+ y cs- tienen la misma fecha y la misma cantidad. y si tran_type es opo y opi tienen la misma fecha y la misma cantidad.

Probé mis conocimientos en javascript. pero no funciona correctamente.

 Object.keys(filterval).map( data, index =>{ if(data.tran_type == 'cs+'){ Object.keys(filterval).map( data1 =>{ if(data1.tran_type == 'cs-'){ if(data1.date == data.date){ if(data1.amount == data.amount){ data.splice(index, 1) } } } } } if(data.tran_type == 'opo'){ Object.keys(filterval).map( data1 =>{ if(data1.tran_type == 'opi'){ if(data1.date == data.date){ if(data1.amount == data.amount){ data.splice(index, 1) } } } } } }); console.log(filterval)

Por favor, ayúdame a obtener el siguiente resultado. Además, corrija mi error en mi código. Las soluciones son bienvenidas. Gracias por adelantado.

 [ { 'tran_type':"cs+", 'date': 3/2/2022, 'amount' 20000 }, { 'tran_type': "cs+", 'date': 1/2/2022, 'amount' 70000 }, { 'tran_type': "opo", 'date': 1/2/2022, 'amount' 90000 } ]
about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

Debe corregir estas líneas en su código:

1.) 'cantidad': 1000 (faltan los dos puntos) --- Puede usar un editor como el código VS. Es una buena práctica y muy recomendable. Si escribe este código en el editor de código Vs, podrá conocer fácilmente todos los errores de sintaxis que tiene su código.

2.) filterval es una matriz y no un objeto. Entonces no tiene que usar Object.keys. Puede usar map() directamente en filterval.

 filterval.map(() => {})

Haga checkout console.log(Object.keys(filterval)) --- Imprimirá una matriz de índices. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

3.) data.splice(index, 1) --- splice debe usarse en matrices y no en objetos. Debería ser filterval.splice(index, 1).
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice

Recomendaría que antes de usar cualquier método incorporado de JavaScript, consulte los documentos de MDN. Además, es una buena práctica dividir el código en fragmentos más pequeños y seguir comprobando en cada paso si todo va bien o no. Si todo parece estar bien, vaya al siguiente paso. Si algo está mal, corríjalo y luego siga adelante.

Aquí está el código que cumple el propósito.

 let filterval = [ { 'tran_type': "cs+", 'date': "2/2/2022", 'amount' : 10000 }, { 'tran_type': "cs-", 'date': "2/2/2022", 'amount' : 10000 }, { 'tran_type':"cs+", 'date': "3/2/2022", 'amount' : 20000 }, { 'tran_type': "opo", 'date': "2/2/2022", 'amount' : 10000 }, { 'tran_type': "opi", 'date': "2/2/2022", 'amount' : 10000 }, { 'tran_type': "cs+", 'date': "1/2/2022", 'amount' : 70000 }, { 'tran_type': "opo", 'date': "1/2/2022", 'amount' : 90000 }] filterval.forEach((data1, index1) => { switch (data1.tran_type) { case 'cs+' : removeIfFound(data1, index1, 'cs-') break; case 'cs-' : removeIfFound(data1, index1, 'cs+') break; case 'opo' : removeIfFound(data1, index1, 'opi') break; case 'opi' : removeIfFound(data1, index1, 'opo') break default : break } }) function removeIfFound(data1, index1, trans_type) { filterval.forEach((data2, index2) => { if (data2.tran_type === trans_type && checkIfEqual(data1, data2)) { filterval.splice(index1, 1) filterval.splice(index2 - 1, 1) return } }) } function checkIfEqual(data1, data2) { return (data1.date === data2.date) && (data1.amount === data2.amount) } console.log(filterval)

Avísame por si necesitas alguna explicación.

about 4 years ago · Juan Pablo Isaza Relatório

0

Cambio :

 if(data.tran_type = 'cs+'){

el código anterior siempre devuelve verdadero porque está dando el valor data.tran_type de 'cs+' a

 if(data.tran_type == 'cs+'){

y también

 'amount' 10000 //should be : 'amount': 10000 // you don't have ':'

y este código está comprobando si data.tran_type es igual al valor de 'cs+'.

e intente escribir mejor su lógica, tener tantos ifs uno dentro de otro es una muy mala práctica, es difícil leer y ver lo que hace el código, intente hacer funciones más pequeñas a las que llame si se cumple alguna condición.

about 4 years ago · Juan Pablo Isaza Relatório

0

Entonces, rompí tu código en partes y obtuve el resultado que estabas pidiendo, este no es el código más atractivo, pero lo escribí para que puedas revisarlo y tratar de entenderlo.

 let array = [ { tran_type: "cs+", date: 2 / 2 / 2022, amount: 10000, }, { tran_type: "cs-", date: 2 / 2 / 2022, amount: 10000, }, { tran_type: "cs+", date: 3 / 2 / 2022, amount: 20000, }, { tran_type: "opo", date: 2 / 2 / 2022, amount: 10000, }, { tran_type: "opi", date: 2 / 2 / 2022, amount: 10000, }, { tran_type: "cs+", date: 1 / 2 / 2022, amount: 70000, }, { tran_type: "opo", date: 1 / 2 / 2022, amount: 90000, }, ]; let finalArray = []; let csPositive = []; let csNegative = []; let opo = []; let opi = []; array.map((element) => { sortByType(element); }); function sortByType(element) { sortCsPositive(element); sortCsNegative(element); sortOpo(element); sortOpi(element); } function sortCsPositive(element) { if (element.tran_type == "cs+") { csPositive.push(element); } } function sortCsNegative(element) { if (element.tran_type == "cs-") { csNegative.push(element); } } function sortOpo(element) { if (element.tran_type == "opo") { opo.push(element); } } function sortOpi(element) { if (element.tran_type == "opi") { opi.push(element); } } function compareDateAndAmout(oneArray, secondArray) { oneArray.forEach((x) => { secondArray.forEach((y) => { y.date == x.date && x.amout == y.amout ? "" : finalArray.push(x); }); }); } compareDateAndAmout(opo, opi); compareDateAndAmout(csPositive, csNegative); console.log(finalArray);
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