Last active
September 8, 2017 08:42
-
-
Save praveenKajla/01fe297f10c5796157706d996b45745f to your computer and use it in GitHub Desktop.
JS Bin// source https://jsbin.com/gajuqej
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"use strict"; | |
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } } | |
var log = console.log; | |
function example(a, b, c) { | |
log({ a: a, b: b, c: c }); | |
return a * b * c; | |
} | |
var __ = Symbol("someempty string"); | |
var isPlaceholder = function isPlaceholder(a) { | |
return a === __; | |
}; | |
var notPlaceholder = function notPlaceholder(a) { | |
return !isPlaceholder(a); | |
}; | |
var removePlaceholder = function removePlaceholder(a) { | |
return a.filter(function (z) { | |
return notPlaceholder(z); | |
}); | |
}; | |
function partial(func) { | |
for (var _len = arguments.length, args1 = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { | |
args1[_key - 1] = arguments[_key]; | |
} | |
var numReqArgs = func.length; | |
return function _partial() { | |
for (var _len2 = arguments.length, args2 = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { | |
args2[_key2] = arguments[_key2]; | |
} | |
var filledIn = args1.map(function (x) { | |
return isPlaceholder(x) && args2.length ? args2.shift() : x; | |
}); | |
var current = [].concat(_toConsumableArray(filledIn), args2); | |
var validArgs = removePlaceholder(current); | |
if (validArgs.length >= numReqArgs) { | |
return func.apply(undefined, _toConsumableArray(validArgs)); | |
} else { | |
return partial.apply(undefined, [func].concat(_toConsumableArray(current))); | |
} | |
}; | |
} | |
var pa1 = partial(example, __, __, __); | |
var pa2 = pa1(100)(3); | |
pa2(3); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"use strict"; | |
const {log} = console; | |
function example(a,b,c){ | |
log({a,b,c}); | |
return a*b*c; | |
} | |
const __ = Symbol("someempty string") | |
const isPlaceholder = a => a===__; | |
const notPlaceholder = a => !(isPlaceholder(a)) | |
const removePlaceholder = a => a.filter(z => notPlaceholder(z)) | |
function partial(func,...args1){ | |
const numReqArgs = func.length; | |
return function _partial(...args2){ | |
const filledIn = args1.map(x => isPlaceholder(x) && args2.length ? | |
args2.shift() : x) | |
const current = [...filledIn,...args2] | |
const validArgs = removePlaceholder(current) | |
if(validArgs.length>=numReqArgs){ | |
return func(...validArgs) | |
} | |
else{ | |
return partial(func,...current); | |
} | |
} | |
} | |
const pa1 = partial(example,__,__,__) | |
const pa2 = pa1(100)(3); | |
pa2(3) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment