Recibo datos => estos datos pueden ser una matriz de objetos o simplemente un objeto. Escribo algo de código, pero tal vez haya una manera de hacer que este código sea más sexy, claro o más corto y sin errores.
Aquí está el código:
export const CalculateIt = (props) => { const conversionValues = [] if (props) { if (props.length > 0) { for (let i = 0; i < props.length; i++) { const clicks = props[i]?.insights?.[0].inline_link_clicks const actionsNumber = props[i]?.insights?.[0]?.actions?.length || 0 let result = 0 if (clicks && actionsNumber) { result = devideNumbers(clicks, actionsNumber, 8) } conversionValues.push(result) } return conversionValues } const clicks = props?.insights?.[0].inline_link_clicks const actionsNumber = props?.insights?.[0]?.actions?.length || 0 let result = 0 if (clicks && actionsNumber) { result = devideNumbers(clicks, actionsNumber) } return conversionValues.push(result) } }Como puede ver allí, puede encontrar algunas partes del código que son similares como:
const clicks = props[i]?.insights?.[0].inline_link_clicks and const clicks = props?.insights?.[0].inline_link_clicks¿Es posible escribirlo más inteligente?
Mejor
De hecho, puede forzar todos los data en una matriz unidimensional y trabajar de forma segura solo con una matriz de objetos.
¿Es este código lo suficientemente sexy?
const obj = {id: 1, val: 1}; const arr = [{id: 1, val: 1},{id: 2, val: 2},{id: 3, val: 3}]; const normalize = (data) => [data].flat(); console.log(normalize(obj)[0]); console.log(normalize(arr)[0]); // ------------------- // and you can use this approach in code: const getResult = (obj) => obj.val * 10; const CalculateIt = (props) => [props].flat().map(getResult); console.log(CalculateIt(obj)); console.log(CalculateIt(arr)); .as-console-wrapper{min-height: 100%!important; top: 0}Probablemente mueva el código común en una función:
function getResult(data) { const clicks = data?.insights?.[0].inline_link_clicks const actionsNumber = data?.insights?.[0]?.actions?.length || 0 let result = 0 if (clicks && actionsNumber) { result = devideNumbers(clicks, actionsNumber, 8) } return result; }Y use la función auxiliar en su función original:
export const CalculateIt = (props) => { const conversionValues = [] if (props) { if (props.constructor === Array) { props.forEach((item) => conversionValues.push(getResult(item))) } else { conversionValues.push(getResult(props)); } return conversionValues; } }