Advertisement
Guest User

Untitled

a guest
Mar 25th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.77 KB | None | 0 0
  1. // --- Directions
  2. // Given an array and chunk size, divide the array into many subarrays
  3. // where each subarray is of length size
  4. // --- Examples
  5. // chunk([1, 2, 3, 4], 2) --> [[ 1, 2], [3, 4]]
  6. // chunk([1, 2, 3, 4, 5], 2) --> [[ 1, 2], [3, 4], [5]]
  7. // chunk([1, 2, 3, 4, 5, 6, 7, 8], 3) --> [[ 1, 2, 3], [4, 5, 6], [7, 8]]
  8. // chunk([1, 2, 3, 4, 5], 4) --> [[ 1, 2, 3, 4], [5]]
  9. // chunk([1, 2, 3, 4, 5], 10) --> [[ 1, 2, 3, 4, 5]]
  10.  
  11. function chunk(array, size) {
  12. const arr = [];
  13. let i = 0;
  14. while (i < array.length) {
  15. arr.push(array.slice(i, i + size));
  16. i = i + size;
  17. }
  18. return arr;
  19. }
  20.  
  21. module.exports = chunk;
  22.  
  23. // Native JS via slice
  24. function forSlice(array, size) {
  25. const arr = [];
  26. for (let i = 0; i < array.length; i += size) {
  27. arr.push(array.slice(i, i + size));
  28. }
  29. return arr;
  30. }
  31.  
  32. // Native JS via slice while
  33. function whileSlice(array, size) {
  34. const arr = [];
  35. let i = 0;
  36. while (i < array.length) {
  37. arr.push(array.slice(i, i + size));
  38. i = i + size;
  39. }
  40. return arr;
  41. }
  42.  
  43. // Multiple loops
  44. function multiLoop(array, size) {
  45. const arr = [];
  46. for (let i = 0; i < array.length; i += size) {
  47. const subArr = [];
  48. for (let k = 0; k < size && i + k < array.length; k++) {
  49. subArr.push(array[i + k]);
  50. }
  51. arr.push(subArr);
  52. }
  53. return arr;
  54. }
  55.  
  56. // Single loop with last item reference
  57. function holdReference(array, size) {
  58. const arr = [];
  59. let window = [];
  60. for (let i = 0; i < array.length; i++) {
  61. if (i !== 0 && i % size === 0) {
  62. arr.push(window);
  63. window = [];
  64. }
  65. window.push(array[i]);
  66. }
  67. if (window.length > 0) {
  68. arr.push(window);
  69. }
  70. return arr;
  71. }
  72.  
  73. // Single loop with last item fetch
  74. function forLastItem(array, size) {
  75. const arr = [[]];
  76. for (let i = 0; i < array.length; i++) {
  77. let lastChunk = arr[arr.length - 1];
  78. if (lastChunk.length < size) {
  79. lastChunk.push(array[i]);
  80. } else {
  81. arr.push([array[i]]);
  82. }
  83. }
  84. return arr;
  85. }
  86.  
  87. // Single loop with last item fetch alternative
  88. function forLastItemAlt(array, size) {
  89. const arr = [];
  90.  
  91. function getLastChunk() {
  92. if (arr.length === 0) {
  93. return null;
  94. }
  95. return arr[arr.length - 1];
  96. }
  97. for (let i = 0; i < array.length; i++) {
  98. let lastChunk = getLastChunk();
  99. if (!lastChunk || lastChunk.length === size) {
  100. arr.push([array[i]]);
  101. } else {
  102. lastChunk.push(array[i]);
  103. }
  104. }
  105. return arr;
  106. }
  107.  
  108. // For of with last item fetch alternative
  109. function forOfLastItem(array, size) {
  110. const arr = [];
  111.  
  112. function getLastChunk() {
  113. if (arr.length === 0) {
  114. return null;
  115. }
  116. return arr[arr.length - 1];
  117. }
  118. for (const item of array) {
  119. const lastChunk = getLastChunk();
  120. if (!lastChunk || lastChunk.length === size) {
  121. arr.push([item]);
  122. } else {
  123. lastChunk.push(item);
  124. }
  125. }
  126. return arr;
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement