Advertisement
Guest User

Untitled

a guest
Oct 21st, 2016
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.48 KB | None | 0 0
  1. ###Results from running function at bottom in console:
  2. ###Lodash 4.10 reduce vs vanilla reduce
  3. ```js
  4. _.reduce(['a','b','c'],(last,next)=>(last+next)) vs ['a','b','c'].reduce((last,next)=>(last+next))
  5. // abc vs abc
  6. _.reduce(['a','b','c'],(last,next)=>(last+next),undefined) vs ['a','b','c'].reduce((last,next)=>(last+next),undefined)
  7. // undefinedabc vs undefinedabc
  8. _.reduce(['b','c'],(last,next)=>(last+next),'a') vs ['b','c'].reduce((last,next)=>(last+next),'a')
  9. // abc vs abc
  10. _.reduce(['a'],(last,next)=>(last+next),undefined) vs ['a'].reduce((last,next)=>(last+next),undefined)
  11. // undefineda vs undefineda
  12. _.reduce(['a'],(last,next)=>(last+next)) vs ['a'].reduce((last,next)=>(last+next))
  13. // a vs a
  14. _.reduce([],(last,next)=>(last+next),'a') vs [].reduce((last,next)=>(last+next),'a')
  15. // a vs a
  16. _.reduce([(l)=>l+' ' + 'a',(l)=>l+' ' + 'b',(l)=>l+' ' + 'c'],(last,next)=>next(last)) vs [(l)=>l+' ' + 'a',(l)=>l+' ' + 'b',(l)=>l+' ' + 'c'].reduce((last,next)=>next(last))
  17. // (l)=>l+' ' + 'a' b c vs (l)=>l+' ' + 'a' b c
  18. ```
  19. ###Lodash only
  20. ```js
  21. _.reduce([(l)=>l+' ' + 'a',(l)=>l+' ' + 'b',(l)=>l+' ' + 'c'],(last,next)=>next(typeof last === 'function'? last() :last))
  22. // undefined a b c
  23. _.reduceRight([(l)=>l+' ' + 'a',(l)=>l+' ' + 'b',(l)=>l+' ' + 'c'],(last,next)=>next(typeof last === 'function'? last() :last))
  24. // undefined c b a
  25. _.flow([(l)=>l+' ' + 'a',(l)=>l+' ' + 'b',(l)=>l+' ' + 'c'],(last,next)=>next(typeof last === 'function'? last() :last))('z')
  26. // TypeError: next is not a function(…)
  27. _.flowRight([(l)=>l+' ' + 'a',(l)=>l+' ' + 'b',(l)=>l+' ' + 'c'],(last,next)=>next(typeof last === 'function'? last() :last))('z')
  28. // TypeError: next is not a function(…)
  29. _.flow([(l,m)=>l+' '+m+' '+'a',(l,m)=>l+' '+m+' '+'b',(l,m)=>l+' '+m+' '+'c'],(last,next)=>next(typeof last === 'function'? last() :last))('z')
  30. // TypeError: next is not a function(…)
  31. _.flowRight([(l,m)=>l+' '+m+' '+'a',(l,m)=>l+' '+m+' '+'b',(l,m)=>l+' '+m+' '+'c'],(last,next)=>next(typeof last === 'function'? last() :last))('z')
  32. // TypeError: next is not a function(…)
  33. _.flow([(l)=>l+' '+'a',(l)=>l+' '+'b',(l)=>l+' '+'c'],(v)=>v)('z')
  34. // z a b c
  35. _.flowRight([(l)=>l+' '+'a',(l)=>l+' '+'b',(l)=>l+' '+'c'],(v)=>v)('z')
  36. // z c b a
  37. _.flow([(l,m)=>l+' '+m+' '+'a',(l,m)=>l+' '+m+' '+'b',(l,m)=>l+' '+m+' '+'c'],(v)=>v)('z')
  38. // z undefined a undefined b undefined c
  39. _.flowRight([(l,m)=>l+' '+m+' '+'a',(l,m)=>l+' '+m+' '+'b',(l,m)=>l+' '+m+' '+'c'],(v)=>v)('z')
  40. // z undefined c undefined b undefined a
  41. _.flow([(l,m)=>l+' '+m+' '+'a',(l,m)=>l+' '+m+' '+'b',(l,m)=>l+' '+m+' '+'c'],(v,v2)=>v+' '+v2)('z')
  42. // z undefined a undefined b undefined c undefined
  43. _.flowRight([(l,m)=>l+' '+m+' '+'a',(l,m)=>l+' '+m+' '+'b',(l,m)=>l+' '+m+' '+'c'],(v,v2)=>v+' '+v2)('z')
  44. // z undefined undefined c undefined b undefined a
  45. ```
  46. ###Console Fn
  47. ```js
  48. [
  49. [`['a','b','c']`,`(last,next)=>(last+next)`, `_.reduce(arr,runner) vs arr.reduce(runner)`],
  50. [`['a','b','c']`,`(last,next)=>(last+next)`, `_.reduce(arr,runner,undefined) vs arr.reduce(runner,undefined)`],
  51. [`['b','c']`,`(last,next)=>(last+next)`, `_.reduce(arr,runner,'a') vs arr.reduce(runner,'a')`],
  52. [`['a']`,`(last,next)=>(last+next)`, `_.reduce(arr,runner,undefined) vs arr.reduce(runner,undefined)`],
  53. [`['a']`,`(last,next)=>(last+next)`, `_.reduce(arr,runner) vs arr.reduce(runner)`],
  54. [`[]`,`(last,next)=>(last+next)`, `_.reduce(arr,runner,'a') vs arr.reduce(runner,'a')`],
  55. [`[(l)=>l+' ' + 'a',(l)=>l+' ' + 'b',(l)=>l+' ' + 'c']`, `(last,next)=>next(last)`, `_.reduce(arr,runner) vs arr.reduce(runner)`],
  56. [`[(l)=>l+' ' + 'a',(l)=>l+' ' + 'b',(l)=>l+' ' + 'c']`, `(last,next)=>next(typeof last === 'function'? last() :last)`, `_.reduce(arr,runner)`],
  57. [`[(l)=>l+' ' + 'a',(l)=>l+' ' + 'b',(l)=>l+' ' + 'c']`, `(last,next)=>next(typeof last === 'function'? last() :last)`, `_.reduceRight(arr,runner)`],
  58. [`[(l)=>l+' ' + 'a',(l)=>l+' ' + 'b',(l)=>l+' ' + 'c']`, `(last,next)=>next(typeof last === 'function'? last() :last)`, `_.flow(arr,runner)('z')`],
  59. [`[(l)=>l+' ' + 'a',(l)=>l+' ' + 'b',(l)=>l+' ' + 'c']`, `(last,next)=>next(typeof last === 'function'? last() :last)`, `_.flowRight(arr,runner)('z')`],
  60. [`[(l,m)=>l+' '+m+' '+'a',(l,m)=>l+' '+m+' '+'b',(l,m)=>l+' '+m+' '+'c']`, `(last,next)=>next(typeof last === 'function'? last() :last)`, `_.flow(arr,runner)('z')`],
  61. [`[(l,m)=>l+' '+m+' '+'a',(l,m)=>l+' '+m+' '+'b',(l,m)=>l+' '+m+' '+'c']`, `(last,next)=>next(typeof last === 'function'? last() :last)`, `_.flowRight(arr,runner)('z')`],
  62. [`[(l)=>l+' '+'a',(l)=>l+' '+'b',(l)=>l+' '+'c']`, `(v)=>v`, `_.flow(arr,runner)('z')`],
  63. [`[(l)=>l+' '+'a',(l)=>l+' '+'b',(l)=>l+' '+'c']`, `(v)=>v`, `_.flowRight(arr,runner)('z')`],
  64. [`[(l,m)=>l+' '+m+' '+'a',(l,m)=>l+' '+m+' '+'b',(l,m)=>l+' '+m+' '+'c']`, `(v)=>v`, `_.flow(arr,runner)('z')`],
  65. [`[(l,m)=>l+' '+m+' '+'a',(l,m)=>l+' '+m+' '+'b',(l,m)=>l+' '+m+' '+'c']`, `(v)=>v`, `_.flowRight(arr,runner)('z')`],
  66. [`[(l,m)=>l+' '+m+' '+'a',(l,m)=>l+' '+m+' '+'b',(l,m)=>l+' '+m+' '+'c']`, `(v,v2)=>v+' '+v2`, `_.flow(arr,runner)('z')`],
  67. [`[(l,m)=>l+' '+m+' '+'a',(l,m)=>l+' '+m+' '+'b',(l,m)=>l+' '+m+' '+'c']`, `(v,v2)=>v+' '+v2`, `_.flowRight(arr,runner)('z')`],
  68. ].forEach((strings)=>{
  69. let [arr,runner,fns] = strings;
  70. let toLog = fns.replace(/arr/g,arr).replace(/runner/g,runner);
  71. let toEval = toLog.split(' vs ');
  72. console.warn(toLog);
  73. try{
  74. console.log(toEval.map(eval).join(' vs '))
  75. } catch(e){
  76. console.log(e.valueOf());
  77. }
  78. });
  79. ```
  80.  
  81.  
  82. ### Bunch of additional reducer experiments
  83. ```js
  84. (function(){
  85. function foo(a,b){return ['foo',a,b].join(' ')}
  86. function bar(a,b){return ['bar',a,b].join(' ')}
  87. function baz(a,b){return ['baz',a,b].join(' ')}
  88. function bop(){
  89. var vals = [foo,bar,baz];
  90. return _.reduceRight(vals.slice(0,-1),(last,next)=>{
  91. return next(last,..._.slice(arguments,1));
  92. },vals[vals.length -1](...arguments));
  93. }
  94. return bop(1,2,3,4,5,6);
  95. }());
  96.  
  97.  
  98. (function(){
  99. function foo(a,b){return ['foo',a,b].join(' ')}
  100. function bar(a,b){return ['bar',a,b].join(' ')}
  101. function baz(a,b){return ['baz',a,b].join(' ')}
  102. function bop(){
  103. var vals = [foo,bar,baz];
  104. return _.reduce(vals.slice(1),(last,next)=>{
  105. return next(last,..._.slice(arguments,1));
  106. },vals[0](...arguments));
  107. }
  108. return bop(1,2,3,4,5,6);
  109. }());
  110. "baz bar foo 1 2 2 2"
  111. // breakdown:
  112. //
  113. // foo a b
  114. // bar a b
  115. // baz a b
  116. // foo a 2
  117. // bar last 2
  118. // baz last 2
  119.  
  120.  
  121. (function(){
  122. function foo(a,b){return ()=>['foo', a].join(' ')}
  123. function bar(a,b){return ()=>['bar', a].join(' ')}
  124. function baz(a,b){return ()=>['baz', a].join(' ')}
  125. function bop(){
  126. var vals = [foo,bar,baz];
  127. return _.reduce(vals.slice(1),(last,next)=>{
  128. return next(last(...arguments),..._.slice(arguments,1));
  129. },vals[0](...arguments))();
  130. }
  131. return bop(1,2,3,4,5,6);
  132. }());
  133. // expected: "foo bar foo baz foo 1 1 1"
  134. // actual: "baz bar foo 1"
  135. //
  136. // baz
  137. // bar
  138. // foo 1
  139. //
  140. //
  141. (function(){
  142. function foo(a,b){return ()=>['foo', ...arguments].join(' ')}
  143. function bar(a,b){return ()=>['bar', ...arguments].join(' ')}
  144. function baz(a,b){return ()=>['baz', ...arguments].join(' ')}
  145. function bop(){
  146. var vals = [foo,bar,baz];
  147. return _.reduce(vals.slice(1),(last,next)=>{
  148. return next(last(...arguments),..._.slice(arguments,1));
  149. },vals[0](...arguments))();
  150. }
  151. return bop(1,2,3,4,5,6);
  152. }());
  153. // foo 1 2 3 4 5 6
  154. // bar 2 3 4 5 6
  155. // "baz 2 3 4 5 6"
  156. //
  157.  
  158.  
  159.  
  160. (function(){
  161. function foo(a,b){return ()=>['foo', ...arguments].join(' ')}
  162. function bar(a,b){return ()=>['bar', ...arguments].join(' ')}
  163. function baz(a,b){return ()=>['baz', ...arguments].join(' ')}
  164. function bop(){
  165. var vals = [foo,bar,baz];
  166. return _.reduce(vals.slice(1),(last,next)=>{
  167. return last(next(...arguments)(),..._.slice(arguments,1));
  168. },vals[0]);
  169. }
  170. return bop(1,2,3,4,5,6);
  171. }());
  172. // "foo bar 1 2 3 4 5 6 2 3 4 5 6"
  173. //
  174.  
  175. (function(){
  176. function foo(a,b){return (next)=>['foo', next, ...arguments].join(' ')}
  177. function bar(a,b){return (next)=>['bar', next, ...arguments].join(' ')}
  178. function baz(a,b){return (next)=>['baz', next, ...arguments].join(' ')}
  179. function bop(){
  180. var vals = [foo,bar,baz];
  181. return _.reduce(vals.slice(1),(last,next)=>{
  182. return last(next(...arguments)())
  183. },vals[0]);
  184. }
  185. return bop(1,2,3,4,5,6);
  186. }());
  187.  
  188. // "foo baz 1 2 3 4 5 6 bar 1 2 3 4 5 6"
  189. //
  190. //
  191. (function(){
  192. function foo(a,b){return (next)=>['foo', next, ...arguments].join(' ')}
  193. function bar(a,b){return (next)=>['bar', next, ...arguments].join(' ')}
  194. function baz(a,b){return (next)=>['baz', next, ...arguments].join(' ')}
  195. function bop(){
  196. var vals = [foo,bar,baz];
  197. return _.reduceRight(vals.slice(1),(last,next)=>{
  198. return last(next(...arguments)(...arguments))
  199. },vals[0]);
  200. }
  201. return bop(1,2,3,4,5,6);
  202. }());
  203. // "foo bar 1 1 2 3 4 5 6 baz 1 1 2 3 4 5 6"
  204. //
  205. //
  206. (function(){
  207. function foo(a,b){return (next)=>['foo', next, ...arguments].join(' ')}
  208. function bar(a,b){return (next)=>['bar', next, ...arguments].join(' ')}
  209. function baz(a,b){return (next)=>['baz', next, ...arguments].join(' ')}
  210. function bop(){
  211. var vals = [foo,bar,baz];
  212. return _.reduceRight(vals.slice(1),(last,next)=>{
  213. return last(next(...arguments)(...arguments),...arguments)
  214. },vals[0]);
  215. }
  216. return bop(1,2,3,4,5,6);
  217. }());
  218. // "foo bar 1 1 2 3 4 5 6 baz 1 1 2 3 4 5 6 1 2 3 4 5 6"
  219. // this I don't get... why is it an error to append () to the last() call?
  220.  
  221.  
  222. var fooOuterCalled = 0;
  223. var fooInnerCalled = 0;
  224. (function(){
  225. function foo(a,b){
  226. ++fooOuterCalled;
  227. debugger;
  228. return (next)=>++fooInnerCalled && ['foo', next, ...arguments].join(' ')
  229. }
  230. function bar(a,b){
  231. return (next)=>['bar', next, ...arguments].join(' ')
  232. }
  233. function baz(a,b){
  234. return (next)=>['baz', next, ...arguments].join(' ')
  235. }
  236. function bop(){
  237. var vals = [foo,bar,baz];
  238. return _.reduceRight(vals.slice(1),(last,next)=>{
  239. return last(next(...arguments)(...arguments),...arguments)
  240. },vals[0]);
  241. }
  242. return bop(1,2,3,4,5,6);
  243. }());
  244. console.log(`fooOuterCalled`, fooOuterCalled);
  245. console.log(`fooInnerCalled`, fooInnerCalled);
  246.  
  247. // Ahhhhh... fooOuter gets called, fooInner becomes last, then executes on the next loop
  248. // trying to call it on the first loop returns the value, so we can't call last.
  249. // That should mean I can prepend Foo's numbers ahead of next.
  250. //
  251.  
  252. (function(){
  253. function foo(a,b){return (a, b)=>['foo', a, b, ...arguments].join(' ')}
  254. function bar(a,b){return (a, b)=>['bar', a, b, ...arguments].join(' ')}
  255. function baz(a,b){return (a, b)=>['baz', a, b, ...arguments].join(' ')}
  256. function bop(){
  257. var vals = [foo,bar,baz];
  258. return _.reduceRight(vals.slice(1),(last,next)=>{
  259. return last(...arguments,next(...arguments)(...arguments))
  260. },vals[0]);
  261. }
  262. return bop(1,2,3,4,5,6);
  263. }());
  264. // "foo 1 2 1 2 3 4 5 6 baz 1 2 1 2 3 4 5 6"
  265.  
  266.  
  267. (function(){
  268. function foo(a,b){return (a, b)=>['foo', a, b, ...arguments].join(' ')}
  269. function bar(a,b){return (a, b)=>['bar', a, b, ...arguments].join(' ')}
  270. function baz(a,b){return (a, b)=>['baz', a, b, ...arguments].join(' ')}
  271. function bop(){
  272. var vals = [foo,bar,baz];
  273. return _.reduceRight(vals.slice(1),(last,next)=>{
  274. return last(...arguments,...next(...arguments)(...arguments))
  275. },vals[0]);
  276. }
  277. return bop(1,2,3,4,5,6);
  278. }());
  279. // "foo 1 2 1 2 3 4 5 6 b a z 1 2 1 2 3 4 5 6"
  280.  
  281. // additional experiments}...
  282. (function(){
  283. function foo(a,b){return (a, b)=>a(b);}
  284. function bar(a,b){return (a, b)=>a(b);}
  285. function baz(a,b){return (a, b)=>a(b);}
  286. function bop(){
  287. var vals = [foo,bar,baz];
  288. return _.reduceRight(vals.slice(1),(last,next)=>{
  289. console.log(`last`, last);
  290. return last[0](next,...arguments);
  291. },[vals[0]]);
  292. }
  293. return bop(1,2,3,4,5,6);
  294.  
  295. ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement