variable una tipos resultado resueltos programas principales pasar numericas mostrar funciones funcion entre ejemplos javascript currying

javascript - una - Función de suma de currículum variable



programas en javascript resueltos (11)

Aquí hay otra forma funcional utilizando un proceso iterativo.

const sum = (num, acc = 0) => { if (!num) return acc; return x => sum(x, acc + num) } sum(1)(2)(3)()

y una linea

const sum = (num, acc = 0) => !num ? acc : x => sum(x, acc + num) sum(1)(2)(3)()

Necesito una función de suma js para trabajar así:

sum(1)(2) = 3 sum(1)(2)(3) = 6 sum(1)(2)(3)(4) = 10 etc.

Oí que no se puede hacer. Pero he oído que si se puede sumar + delante de la sum se puede hacer. Me gusta +sum(1)(2)(3)(4) .
¿Alguna idea de cómo hacer esto?


Aquí hay una solución que usa ES6 y toString , similar a @Vemba

function add(a) { let curry = (b) => { a += b return curry } curry.toString = () => a return curry } console.log(add(1)) console.log(add(1)(2)) console.log(add(1)(2)(3)) console.log(add(1)(2)(3)(4))


Este es un ejemplo del uso de corchetes vacíos en la última llamada como clave de cierre (de mi última entrevista):

suma (1) (4) (66) (35) (3) ()

function sum(numberOne) { var count = numberOne; return function by(numberTwo) { if (numberTwo === undefined) { return count; } else { count += numberTwo; return by; } } } console.log(sum(1)(4)(66)(35)(3)());


Estoy publicando esta revisión como su propia publicación, ya que aparentemente todavía no tengo suficiente reputación como para dejarla como un comentario. Esta es una revisión de la excelente solución de @Rafael.

function sum (n) { var v = x => sum (n + x); v.valueOf = () => n; return v; } console.log(+sum(1)(2)(3)(4)); //10

No vi una razón para mantener el bit v.toString, ya que no parecía necesario. Si me equivoqué al hacerlo, por favor, hágame saber en los comentarios por qué se requiere v.toString (sin mi aprobación). Convirtió el resto de las funciones anónimas en funciones de flecha para facilitar la lectura.


No estoy seguro si entendí lo que quieres, pero

function sum (n) { var v = function (x) { return sum (n + x); }; v.valueOf = v.toString = function () { return n; }; return v; } console.log(+sum(1)(2)(3)(4));

JsFiddle


Otro enfoque ligeramente más corto:

const sum = a => b => b? sum(a + b) : a;

Utilizable como:

console.log( sum(1)(2)(), sum(3)(4)(5)() );


Para hacer que sum(1) pueda llamar sum(1)(2) , debe devolver una función.

La función puede ser llamada o convertida en un número con valueOf .

function sum(a) { var sum = a; function f(b) { sum += b; return f; } f.toString = function() { return sum } return f }


Puede hacer uso de la siguiente función

function add(num){ add.sum || (add.sum = 0) // make sure add.sum exists if not assign it to 0 add.sum += num; // increment it return add.toString = add.valueOf = function(){ var rtn = add.sum; // we save the value return add.sum = 0, rtn // return it before we reset add.sum to 0 }, add; // return the function }

Dado que las funciones son objetos, podemos agregarle propiedades, que estamos restableciendo cuando se ha accedido.


Ya que esta es una pregunta de entrevista común, aquí está mi opinión sobre el uso de las propiedades de la función para agregar la memoria a la función sum () y simplificar un poco su código:

function sum(x) { sum.result = (sum.result) ? sum.result += x : x; sum.valueOf = function() { return sum.result; } return sum; } sum(1)(2)(3); // == 6


let add = (a) => { let sum = a; funct = function(b) { sum += b; return funct; }; Object.defineProperty(funct, ''valueOf'', { value: function() { return sum; } }); return funct; }; console.log(+add(1)(2)(3))


function sum(a){ let res = 0; function getarrSum(arr){ return arr.reduce( (e, sum=0) => { sum += e ; return sum ;} ) } function calculateSumPerArgument(arguments){ let res = 0; if(arguments.length >0){ for ( let i = 0 ; i < arguments.length ; i++){ if(Array.isArray(arguments[i])){ res += getarrSum( arguments[i]); } else{ res += arguments[i]; } } } return res; } res += calculateSumPerArgument(arguments); return function f(b){ if(b == undefined){ return res; } else{ res += calculateSumPerArgument(arguments); return f; } } }