const addToContext = property => assign({ [property]: (context, event) => { onValid(); // change the background back to normal return context[property] + event.detail.value; } }); const [addToNum1, addToNum2, addToOperation, addToResult] = ["num1", "num2", "operation", "result"].map(key => addToContext(key)); const contextKeys = ["num1", "num2", "operation", "result"]; const clearResult = assign(contextKeys .reduce((obj, x) => ({ ...obj, [x]: () => { onValid(); return ""; } }), {})); const calculateResult = assign({ result: (context, event) => { onValid(); // change the background back to normal let num1 = convertNumber(context.num1); let num2 = convertNumber(context.num2); let opFunction = actionMapping[context.operation] if (opFunction) { let result = opFunction(num1, num2); if (result !== "Invalid") { return toBit(opFunction(num1, num2)); } return result; } return "error"; } })