es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

DataWeave transforma un mensaje en dos arrays con números.

Me gustaría comparar dos arrays (como input2) con números. Y si el precio es diferente en alrededor del 5% de aumento, entonces me gustaría enviar un correo electrónico. Intenté de esta manera pero solo dio el número que coincide con los mismos números. Pero me gustaría tener solo este precio que aumenta en un 5% más.

%dw 2.0
output application/json 

var input2 = [{
            "T": "GIK",
            "c": 10.02
    },
    {
        "T": "EXTR",
        "c": 4.43
    },
    {
        "T": "TANH",
        "c": 2.34
    },
    {
        "T": "VSAT",
        "c": 34.24
    },
    {
        "T": "KIMpL",
        "c": 25.9102
    }
]

payload.results.c reduce (item, acc = []) -> if (input2.c contains item) acc + item else acc
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para resolver este problema, puedes utilizar la función map para iterar sobre el array y verificar si el precio es un 5% mayor que el precio correspondiente en el segundo array. Si lo es, puedes agregarlo a un nuevo array y enviar un correo electrónico con el resultado.

    Aquí hay un ejemplo de fragmento de código que demuestra esta solución:

    %dw 2.0
    output application/json
    
    var input1 = [1.1, 2.2, 3.3, 4.4, 5.5]
    var input2 = [1.0, 2.3, 3.0, 4.2, 5.6]
    
    var threshold = 0.05
    
    // encontrar precios que sean un 5% mayores que input2
    var diff = input1 map ((item, index) ->
      if (item > input2[index] * (1 + threshold)) item else null
    )
    
    // eliminar valores nulos
    var results = diff filter ((item) -> item != null)
    
    // enviar correo electrónico si el array de resultados no está vacío
    if (sizeOf(results) > 0) {
      email {
        to: "recipient@example.com",
        subject: "Se detectó un aumento de precio",
        body: "Los siguientes precios han aumentado al menos un 5%: " ++ results
      }
    }
    
    // retornar el resultado
    ---
    results
    

    En este ejemplo, tenemos dos arrays (input1 e input2) que contienen los precios de algunos artículos. Queremos comparar estos dos arrays y encontrar cualquier precio que haya aumentado al menos un 5%.

    Primero, definimos una variable threshold que representa el porcentaje de aumento que queremos detectar. Luego, utilizamos la función map para iterar sobre el array input1 y verificar si cada precio es mayor que el precio correspondiente en input2 al menos en un 5%. Si lo es, agregamos el precio a un nuevo array diff, de lo contrario agregamos null.

    Luego, filtramos cualquier valor null del array diff y almacenamos los resultados en un nuevo array results. Si este array no está vacío, enviamos un correo electrónico a un destinatario con la lista de precios que han aumentado. Finalmente, retornamos el array results como el resultado del script.

    Puedes modificar este script para que funcione con tu formato de array específico y sistema de correo electrónico. ¡Espero que esto te sea de ayuda!

Comments are closed.