1. JavaScript / Говнокод #24015

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    'use strict';
    
    function map(fn, array) {
    	let arr = [];
    	for(let i of array)
    		arr.push(fn(i));
    	return arr;
    }
    
    function take(fn, count) {
    	var arr = [];
    	for(let i = 0; i < count; i++)
    		arr.push(fn());
    	return arr;
    }
    
    function sequence(start, step)
    {
    	step = step || 1;
    	start = start || 0;
    	start-=step;
    	return function() {
    		return start+=step;
    	}
    }
    
    function fmap(a, gen) {
    	return (...args) => {
    		if(args.length > 0)
    			return a(gen(...args));
    		else
    			return a(gen());
    	};
    }
    
    function partial(fn, ...args) {
    	return (...twoArgs) => {
    		let newM = args.slice();
    		for(let k of twoArgs)
    			newM.push(k);
    		return fn(...newM);
    	};
    }
    
    function partialAny(fn, ...args) {
    	return (...twoArgs) => {
    		let newM = args.slice();
    		let k = 0;
    		for(let i = 0; i < newM.length; i++)
    			if(newM[i] === undefined)
    				newM[i] = twoArgs[k++];
    		while(twoArgs[k] !== undefined) {
    			newM.push(twoArgs[k]);
    			k++;
    		}
    		return fn(...newM);
    	};
    }
    
    function bind(fn, context) {
    	return (...args) => {
    		return fn.apply(context, args);
    	};
    }
    
    function pluck(objects, fieldName) {
    	let a = [];
    	for(let i = 0; i < objects.length; i++)
    		if(objects[i][fieldName] !== undefined)
    			a.push(objects[i][fieldName]);
    	return a;
    }
    
    function filter(arr, fn) {
    	let a = [];
    	arr.forEach((item, i, arr) => {
    		if(fn(item))
    			a.push(item);
    	});
    	return a;
    }
    
    function count(arr) {
    	return Object.keys(arr).length;
    }
    
    var a = { a: 1, b: 2 };
    console.log(count(a)); // 2
    var b = function () {};
    console.log(count(b)); // 0
    var c = [1, 2, 3];
    console.log(count(c)); // 3
    var d = [];
    d[100] = 1;
    console.log(count(d)); // 1

    Ня (^_^)
    Суперкодики!

    Запостил: fuckercoder, 27 Марта 2018

    Комментарии (3) RSS

    • Закос под Lisp или Haskell?
      Чет не нашел в Haskell pluck.
      Ответить
      • Питушня какая-то, а не Haskell. Одно название.
        take нечистый, sequence нечистый и вообще енумерирует какую-то питушню вместо разгона монад
        fmap интересен, хотя и работает только для функций
        bind чисто жсный
        map, filter, bind в версиях жс, где уже есть let и =>, точно работают, реализовывать их не надо.
        Ответить
    • Но зачем( я про map итд ) ?

      Ладно бы, речь о поддержке старых версий жабаскрипта, но, тот же 'for.. of..' - это уже ES6( 2015 года ), вдобавок, работающий вдвое медленней банального forEach, который был бы гораздо уместнее
      Ответить

    Добавить комментарий