@rogolev/value 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/CHANGELOG.md +142 -1
  2. package/docs/helpers/array/array_chunk.md +80 -0
  3. package/docs/helpers/array/array_chunk_with_keys.md +81 -0
  4. package/docs/helpers/array/array_column.md +110 -0
  5. package/docs/helpers/array/array_combine.md +77 -0
  6. package/docs/helpers/array/array_count_values.md +71 -0
  7. package/docs/helpers/array/array_diff.md +97 -0
  8. package/docs/helpers/array/array_diff_assoc.md +81 -0
  9. package/docs/helpers/array/array_diff_key.md +81 -0
  10. package/docs/helpers/array/array_diff_uassoc.md +101 -0
  11. package/docs/helpers/array/array_diff_ukey.md +101 -0
  12. package/docs/helpers/array/array_fill.md +81 -0
  13. package/docs/helpers/array/array_fill_keys.md +73 -0
  14. package/docs/helpers/array/array_filter.md +79 -0
  15. package/docs/helpers/array/array_flip.md +70 -0
  16. package/docs/helpers/array/array_index_max.md +78 -0
  17. package/docs/helpers/array/array_index_min.md +78 -0
  18. package/docs/helpers/array/array_intersect.md +91 -0
  19. package/docs/helpers/array/array_intersect_assoc.md +91 -0
  20. package/docs/helpers/array/array_intersect_key.md +91 -0
  21. package/docs/helpers/array/array_intersect_uassoc.md +101 -0
  22. package/docs/helpers/array/array_intersect_ukey.md +101 -0
  23. package/docs/helpers/array/array_key_exists.md +73 -0
  24. package/docs/helpers/array/array_key_first.md +62 -0
  25. package/docs/helpers/array/array_key_last.md +62 -0
  26. package/docs/helpers/array/array_key_to_lower_case.md +57 -0
  27. package/docs/helpers/array/array_key_to_upper_case.md +57 -0
  28. package/docs/helpers/array/array_keys.md +62 -0
  29. package/docs/helpers/array/array_map.md +69 -0
  30. package/docs/helpers/array/array_merge.md +67 -0
  31. package/docs/helpers/array/array_merge_recursive.md +86 -0
  32. package/docs/helpers/array/array_pad.md +83 -0
  33. package/docs/helpers/array/array_pop.md +64 -0
  34. package/docs/helpers/array/array_product.md +62 -0
  35. package/docs/helpers/array/array_push.md +57 -0
  36. package/docs/helpers/array/array_rand.md +99 -0
  37. package/docs/helpers/array/array_reduce.md +77 -0
  38. package/docs/helpers/array/array_replace.md +85 -0
  39. package/docs/helpers/array/array_replace_recursive.md +87 -0
  40. package/docs/helpers/array/array_reverse.md +55 -0
  41. package/docs/helpers/array/array_search.md +74 -0
  42. package/docs/helpers/array/array_shift.md +64 -0
  43. package/docs/helpers/array/array_slice.md +65 -0
  44. package/docs/helpers/array/array_splice.md +103 -0
  45. package/docs/helpers/array/array_sum.md +55 -0
  46. package/docs/helpers/array/array_udiff.md +97 -0
  47. package/docs/helpers/array/array_udiff_assoc.md +101 -0
  48. package/docs/helpers/array/array_udiff_uassoc.md +88 -0
  49. package/docs/helpers/array/array_uintersect.md +101 -0
  50. package/docs/helpers/array/array_uintersect_assoc.md +102 -0
  51. package/docs/helpers/array/array_uintersect_uassoc.md +135 -0
  52. package/docs/helpers/array/array_unique.md +54 -0
  53. package/docs/helpers/array/array_unshift.md +58 -0
  54. package/docs/helpers/array/array_values.md +54 -0
  55. package/docs/helpers/array/array_walk.md +87 -0
  56. package/docs/helpers/array/array_walk_recursive.md +93 -0
  57. package/docs/helpers/array/count.md +54 -0
  58. package/docs/helpers/array/in_array.md +65 -0
  59. package/docs/helpers/array/natsort.md +60 -0
  60. package/docs/helpers/array/range.md +76 -0
  61. package/docs/helpers/array/shuffle.md +74 -0
  62. package/docs/helpers/array/sort.md +79 -0
  63. package/docs/helpers/is_char.md +84 -0
  64. package/docs/helpers/string/is_digit_char.md +70 -0
  65. package/docs/helpers/string/is_whitespace_char.md +70 -0
  66. package/docs/helpers/string/natcompare.md +69 -0
  67. package/docs/helpers/string/natcompare_numeric.md +70 -0
  68. package/docs/helpers.md +125 -1
  69. package/index.mjs +66 -1
  70. package/package.json +2 -1
  71. package/prettier.config.mjs +2 -1
  72. package/src/helpers/array/array_chunk.mjs +102 -0
  73. package/src/helpers/array/array_chunk_with_keys.mjs +102 -0
  74. package/src/helpers/array/array_column.mjs +131 -0
  75. package/src/helpers/array/array_combine.mjs +26 -0
  76. package/src/helpers/array/array_count_values.mjs +82 -0
  77. package/src/helpers/array/array_diff.mjs +77 -0
  78. package/src/helpers/array/array_diff_assoc.mjs +56 -0
  79. package/src/helpers/array/array_diff_key.mjs +56 -0
  80. package/src/helpers/array/array_diff_uassoc.mjs +76 -0
  81. package/src/helpers/array/array_diff_ukey.mjs +71 -0
  82. package/src/helpers/array/array_fill.mjs +108 -0
  83. package/src/helpers/array/array_fill_keys.mjs +90 -0
  84. package/src/helpers/array/array_filter.mjs +105 -0
  85. package/src/helpers/array/array_flip.mjs +58 -0
  86. package/src/helpers/array/array_index_max.mjs +82 -0
  87. package/src/helpers/array/array_index_min.mjs +82 -0
  88. package/src/helpers/array/array_intersect.mjs +71 -0
  89. package/src/helpers/array/array_intersect_assoc.mjs +67 -0
  90. package/src/helpers/array/array_intersect_key.mjs +67 -0
  91. package/src/helpers/array/array_intersect_uassoc.mjs +77 -0
  92. package/src/helpers/array/array_intersect_ukey.mjs +72 -0
  93. package/src/helpers/array/array_key_exists.mjs +83 -0
  94. package/src/helpers/array/array_key_first.mjs +73 -0
  95. package/src/helpers/array/array_key_last.mjs +74 -0
  96. package/src/helpers/array/array_key_to_lower_case.mjs +71 -0
  97. package/src/helpers/array/array_key_to_upper_case.mjs +71 -0
  98. package/src/helpers/array/array_keys.mjs +65 -0
  99. package/src/helpers/array/array_map.mjs +84 -0
  100. package/src/helpers/array/array_merge.mjs +95 -0
  101. package/src/helpers/array/array_merge_recursive.mjs +153 -0
  102. package/src/helpers/array/array_pad.mjs +105 -0
  103. package/src/helpers/array/array_pop.mjs +82 -0
  104. package/src/helpers/array/array_product.mjs +67 -0
  105. package/src/helpers/array/array_push.mjs +75 -0
  106. package/src/helpers/array/array_rand.mjs +129 -0
  107. package/src/helpers/array/array_reduce.mjs +90 -0
  108. package/src/helpers/array/array_replace.mjs +25 -0
  109. package/src/helpers/array/array_replace_recursive.mjs +109 -0
  110. package/src/helpers/array/array_reverse.mjs +62 -0
  111. package/src/helpers/array/array_search.mjs +104 -0
  112. package/src/helpers/array/array_shift.mjs +78 -0
  113. package/src/helpers/array/array_slice.mjs +99 -0
  114. package/src/helpers/array/array_splice.mjs +218 -0
  115. package/src/helpers/array/array_sum.mjs +60 -0
  116. package/src/helpers/array/array_udiff.mjs +91 -0
  117. package/src/helpers/array/array_udiff_assoc.mjs +71 -0
  118. package/src/helpers/array/array_udiff_uassoc.mjs +124 -0
  119. package/src/helpers/array/array_uintersect.mjs +72 -0
  120. package/src/helpers/array/array_uintersect_assoc.mjs +77 -0
  121. package/src/helpers/array/array_uintersect_uassoc.mjs +121 -0
  122. package/src/helpers/array/array_unique.mjs +77 -0
  123. package/src/helpers/array/array_unshift.mjs +64 -0
  124. package/src/helpers/array/array_values.mjs +57 -0
  125. package/src/helpers/array/array_walk.mjs +95 -0
  126. package/src/helpers/array/array_walk_recursive.mjs +104 -0
  127. package/src/helpers/array/count.mjs +57 -0
  128. package/src/helpers/array/in_array.mjs +67 -0
  129. package/src/helpers/array/natsort.mjs +62 -0
  130. package/src/helpers/array/range.mjs +121 -0
  131. package/src/helpers/array/shuffle.mjs +73 -0
  132. package/src/helpers/array/sort.mjs +69 -0
  133. package/src/helpers/is_char.mjs +54 -0
  134. package/src/helpers/string/is_digit_char.mjs +60 -0
  135. package/src/helpers/string/is_whitespace_char.mjs +54 -0
  136. package/src/helpers/string/natcompare.mjs +107 -0
  137. package/src/helpers/string/natcompare_numeric.mjs +131 -0
  138. package/tests/helpers/array/array_chunk.test.mjs +49 -0
  139. package/tests/helpers/array/array_chunk_with_keys.test.mjs +45 -0
  140. package/tests/helpers/array/array_column.test.mjs +87 -0
  141. package/tests/helpers/array/array_combine.test.mjs +41 -0
  142. package/tests/helpers/array/array_count_values.test.mjs +40 -0
  143. package/tests/helpers/array/array_diff.test.mjs +78 -0
  144. package/tests/helpers/array/array_diff_assoc.test.mjs +64 -0
  145. package/tests/helpers/array/array_diff_key.test.mjs +64 -0
  146. package/tests/helpers/array/array_diff_uassoc.test.mjs +73 -0
  147. package/tests/helpers/array/array_diff_ukey.test.mjs +77 -0
  148. package/tests/helpers/array/array_fill.test.mjs +47 -0
  149. package/tests/helpers/array/array_fill_keys.test.mjs +35 -0
  150. package/tests/helpers/array/array_filter.test.mjs +38 -0
  151. package/tests/helpers/array/array_flip.test.mjs +33 -0
  152. package/tests/helpers/array/array_index_max.test.mjs +41 -0
  153. package/tests/helpers/array/array_index_min.test.mjs +41 -0
  154. package/tests/helpers/array/array_intersect.test.mjs +65 -0
  155. package/tests/helpers/array/array_intersect_assoc.test.mjs +65 -0
  156. package/tests/helpers/array/array_intersect_key.test.mjs +65 -0
  157. package/tests/helpers/array/array_intersect_uassoc.test.mjs +76 -0
  158. package/tests/helpers/array/array_intersect_ukey.test.mjs +74 -0
  159. package/tests/helpers/array/array_key_exists.test.mjs +36 -0
  160. package/tests/helpers/array/array_key_first.test.mjs +29 -0
  161. package/tests/helpers/array/array_key_last.test.mjs +29 -0
  162. package/tests/helpers/array/array_key_to_lower_case.test.mjs +23 -0
  163. package/tests/helpers/array/array_key_to_upper_case.test.mjs +23 -0
  164. package/tests/helpers/array/array_keys.test.mjs +27 -0
  165. package/tests/helpers/array/array_map.test.mjs +32 -0
  166. package/tests/helpers/array/array_merge.test.mjs +37 -0
  167. package/tests/helpers/array/array_merge_recursive.test.mjs +65 -0
  168. package/tests/helpers/array/array_pad.test.mjs +48 -0
  169. package/tests/helpers/array/array_pop.test.mjs +29 -0
  170. package/tests/helpers/array/array_product.test.mjs +33 -0
  171. package/tests/helpers/array/array_push.test.mjs +31 -0
  172. package/tests/helpers/array/array_rand.test.mjs +59 -0
  173. package/tests/helpers/array/array_reduce.test.mjs +44 -0
  174. package/tests/helpers/array/array_replace.test.mjs +46 -0
  175. package/tests/helpers/array/array_replace_recursive.test.mjs +46 -0
  176. package/tests/helpers/array/array_reverse.test.mjs +31 -0
  177. package/tests/helpers/array/array_search.test.mjs +48 -0
  178. package/tests/helpers/array/array_shift.test.mjs +29 -0
  179. package/tests/helpers/array/array_slice.test.mjs +49 -0
  180. package/tests/helpers/array/array_splice.test.mjs +67 -0
  181. package/tests/helpers/array/array_sum.test.mjs +27 -0
  182. package/tests/helpers/array/array_udiff.test.mjs +95 -0
  183. package/tests/helpers/array/array_udiff_assoc.test.mjs +77 -0
  184. package/tests/helpers/array/array_udiff_uassoc.test.mjs +89 -0
  185. package/tests/helpers/array/array_uintersect.test.mjs +78 -0
  186. package/tests/helpers/array/array_uintersect_assoc.test.mjs +80 -0
  187. package/tests/helpers/array/array_uintersect_uassoc.test.mjs +122 -0
  188. package/tests/helpers/array/array_unique.test.mjs +27 -0
  189. package/tests/helpers/array/array_unshift.test.mjs +31 -0
  190. package/tests/helpers/array/array_values.test.mjs +27 -0
  191. package/tests/helpers/array/array_walk.test.mjs +48 -0
  192. package/tests/helpers/array/array_walk_recursive.test.mjs +53 -0
  193. package/tests/helpers/array/count.test.mjs +27 -0
  194. package/tests/helpers/array/in_array.test.mjs +52 -0
  195. package/tests/helpers/array/natsort.test.mjs +71 -0
  196. package/tests/helpers/array/range.test.mjs +51 -0
  197. package/tests/helpers/array/shuffle.test.mjs +42 -0
  198. package/tests/helpers/array/sort.test.mjs +60 -0
  199. package/tests/helpers/is_char.test.mjs +40 -0
  200. package/tests/helpers/string/is_digit_char.test.mjs +32 -0
  201. package/tests/helpers/string/is_whitespace_char.test.mjs +32 -0
  202. package/tests/helpers/string/natcompare.test.mjs +100 -0
  203. package/tests/helpers/string/natcompare_numeric.test.mjs +110 -0
@@ -0,0 +1,129 @@
1
+ import empty from '../empty.mjs';
2
+ import is_array from '../is_array.mjs';
3
+ import is_int from '../is_int.mjs';
4
+
5
+ /**
6
+ * Возвращает один или несколько случайных ключей из массива.
7
+ *
8
+ * ### Описание
9
+ *
10
+ * Функция `array_rand` используется для получения одного или нескольких случайных ключей из массива.
11
+ * Она поддерживает как обычные массивы, так и ассоциативные массивы (объекты с ключами и значениями).
12
+ *
13
+ * ### Параметры
14
+ *
15
+ * - `arr` (object): Исходный массив.
16
+ * - `count` (number): Количество случайных ключей для возврата. По умолчанию `1`.
17
+ *
18
+ * ### Возвращаемое значение
19
+ *
20
+ * Возвращает один или несколько случайных ключей из массива. Если массив пустой, возвращает `null`.
21
+ *
22
+ * ### Примеры использования
23
+ *
24
+ * 1. Получение одного случайного ключа из обычного массива:
25
+ *
26
+ * ```js
27
+ * const array = [1, 2, 3, 4, 5];
28
+ * const result = array_rand(array);
29
+ * console.log(result); // Например, 2
30
+ * ```
31
+ *
32
+ * 2. Получение одного случайного ключа из ассоциативного массива:
33
+ *
34
+ * ```js
35
+ * const array = { a: 1, b: 2, c: 3 };
36
+ * const result = array_rand(array);
37
+ * console.log(result); // Например, 'b'
38
+ * ```
39
+ *
40
+ * 3. Получение нескольких случайных ключей из обычного массива:
41
+ *
42
+ * ```js
43
+ * const array = [1, 2, 3, 4, 5];
44
+ * const result = array_rand(array, 3);
45
+ * console.log(result); // Например, [0, 2, 4]
46
+ * ```
47
+ *
48
+ * 4. Получение нескольких случайных ключей из ассоциативного массива:
49
+ *
50
+ * ```js
51
+ * const array = { a: 1, b: 2, c: 3, d: 4, e: 5 };
52
+ * const result = array_rand(array, 3);
53
+ * console.log(result); // Например, ['a', 'c', 'e']
54
+ * ```
55
+ *
56
+ * 5. Обработка пустого массива:
57
+ *
58
+ * ```js
59
+ * const array = [];
60
+ * const result = array_rand(array);
61
+ * console.log(result); // null
62
+ * ```
63
+ *
64
+ * 6. Обработка значений, не являющихся массивами:
65
+ *
66
+ * ```js
67
+ * try {
68
+ * const result = array_rand('not an array');
69
+ * } catch (e) {
70
+ * console.error(e.message); // Параметр "arr" должен быть массивом.
71
+ * }
72
+ * ```
73
+ *
74
+ * 7. Обработка значений параметра count, не являющихся целыми числами:
75
+ *
76
+ * ```js
77
+ * try {
78
+ * const result = array_rand([1, 2, 3], 'not a number');
79
+ * } catch (e) {
80
+ * console.error(e.message); // Параметр "count" должен быть целым числом.
81
+ * }
82
+ * ```
83
+ *
84
+ * 8. Обработка значений параметра count, выходящих за пределы длины массива:
85
+ *
86
+ * ```js
87
+ * try {
88
+ * const result = array_rand([1, 2, 3], 5);
89
+ * } catch (e) {
90
+ * console.error(e.message); // Значение параметра "count" выходит за пределы длины массива.
91
+ * }
92
+ * ```
93
+ *
94
+ * @param {object} arr Исходный массив.
95
+ * @param {number} [count=1] Количество случайных ключей для возврата.
96
+ * @returns {any} Возвращает один или несколько случайных ключей из массива. Если массив пустой, возвращает `null`.
97
+ * @throws {TypeError} Если параметр не является массивом или если параметр count не является целым числом.
98
+ * @throws {Error} Если параметр count выходит за пределы длины массива.
99
+ */
100
+ export default function array_rand(arr, count = 1) {
101
+ if (!is_array(arr)) {
102
+ throw new TypeError('Параметр "arr" должен быть массивом.');
103
+ }
104
+
105
+ if (!is_int(count)) {
106
+ throw new TypeError('Параметр "count" должен быть целым числом.');
107
+ }
108
+
109
+ if (empty(arr)) {
110
+ return null;
111
+ }
112
+
113
+ const keys = Object.keys(arr);
114
+
115
+ if (count < 1 || count > keys.length) {
116
+ throw new Error('Значение параметра "count" выходит за пределы длины массива.');
117
+ }
118
+
119
+ const result = [];
120
+
121
+ while (count > 0) {
122
+ const rand_index = Math.floor(Math.random() * keys.length);
123
+ result.push(keys[rand_index]);
124
+ keys.splice(rand_index, 1);
125
+ count--;
126
+ }
127
+
128
+ return result.length === 1 ? result[0] : result;
129
+ }
@@ -0,0 +1,90 @@
1
+ import is_array from '../is_array.mjs';
2
+ import is_function from '../is_function.mjs';
3
+
4
+ /**
5
+ * Применяет функцию обратного вызова к каждому элементу массива (слева направо), чтобы уменьшить его до одного значения.
6
+ *
7
+ * ### Описание
8
+ *
9
+ * Функция `array_reduce` используется для последовательного применения функции обратного вызова к каждому элементу массива, чтобы уменьшить его до одного значения.
10
+ * Она поддерживает как обычные массивы, так и ассоциативные массивы (объекты с ключами и значениями).
11
+ *
12
+ * ### Параметры
13
+ *
14
+ * - `arr` (object): Исходный массив.
15
+ * - `callback` (function): Функция обратного вызова, применяемая к каждому элементу массива.
16
+ * - `initial` (any): Начальное значение для аккумулятора. По умолчанию `null`.
17
+ *
18
+ * ### Возвращаемое значение
19
+ *
20
+ * Возвращает одно значение, полученное в результате последовательного применения функции обратного вызова к каждому элементу массива.
21
+ *
22
+ * ### Примеры использования
23
+ *
24
+ * 1. Суммирование элементов массива:
25
+ *
26
+ * ```js
27
+ * const array = [1, 2, 3, 4];
28
+ * const sum = array_reduce(array, (acc, value) => acc + value, 0);
29
+ * console.log(sum); // 10
30
+ * ```
31
+ *
32
+ * 2. Объединение строк:
33
+ *
34
+ * ```js
35
+ * const array = ['a', 'b', 'c'];
36
+ * const result = array_reduce(array, (acc, value) => acc + value, '');
37
+ * console.log(result); // 'abc'
38
+ * ```
39
+ *
40
+ * 3. Обработка ассоциативного массива:
41
+ *
42
+ * ```js
43
+ * const array = { a: 1, b: 2, c: 3 };
44
+ * const sum = array_reduce(array, (acc, value) => acc + value, 0);
45
+ * console.log(sum); // 6
46
+ * ```
47
+ *
48
+ * 4. Обработка значений, не являющихся массивами:
49
+ *
50
+ * ```js
51
+ * try {
52
+ * const result = array_reduce('not an array', (acc, value) => acc + value, 0);
53
+ * } catch (e) {
54
+ * console.error(e.message); // Параметр "arr" должен быть массивом.
55
+ * }
56
+ * ```
57
+ *
58
+ * 5. Обработка значений, не являющихся функциями:
59
+ *
60
+ * ```js
61
+ * try {
62
+ * const result = array_reduce([1, 2, 3], 'not a function', 0);
63
+ * } catch (e) {
64
+ * console.error(e.message); // Параметр "callback" должен быть функцией.
65
+ * }
66
+ * ```
67
+ *
68
+ * @param {object} arr Исходный массив.
69
+ * @param {function} callback Функция обратного вызова, применяемая к каждому элементу массива.
70
+ * @param {any} [initial=null] Начальное значение для аккумулятора.
71
+ * @returns {any} Возвращает одно значение, полученное в результате последовательного применения функции обратного вызова к каждому элементу массива.
72
+ * @throws {TypeError} Если параметры не являются массивом или функцией.
73
+ */
74
+ export default function array_reduce(arr, callback, initial = null) {
75
+ if (!is_array(arr)) {
76
+ throw new TypeError('Параметр "arr" должен быть массивом.');
77
+ }
78
+
79
+ if (!is_function(callback)) {
80
+ throw new TypeError('Параметр "callback" должен быть функцией.');
81
+ }
82
+
83
+ let carry = initial;
84
+
85
+ for (const [, v] of Object.entries(arr)) {
86
+ carry = callback(carry, v);
87
+ }
88
+
89
+ return carry;
90
+ }
@@ -0,0 +1,25 @@
1
+ import array from '../array.mjs';
2
+ import is_array from '../is_array.mjs';
3
+ import is_list from '../is_list.mjs';
4
+
5
+ export default function array_replace(arr, ...replacements) {
6
+ if (!is_array(arr)) {
7
+ throw new TypeError('Параметр "arr" должен быть массивом.');
8
+ }
9
+
10
+ if (!replacements.every((replacement) => is_array(replacement))) {
11
+ throw new TypeError('Параметр "replacements" должен быть массивом.');
12
+ }
13
+
14
+ const result = is_list(arr) ? Array.from(arr) : array(arr);
15
+
16
+ for (const replacement of replacements) {
17
+ for (const [k, v] of Object.entries(replacement)) {
18
+ if (k in result) {
19
+ result[k] = v;
20
+ }
21
+ }
22
+ }
23
+
24
+ return result;
25
+ }
@@ -0,0 +1,109 @@
1
+ import array from '../array.mjs';
2
+ import is_array from '../is_array.mjs';
3
+ import is_list from '../is_list.mjs';
4
+
5
+ /**
6
+ * Рекурсивно заменяет значения в массиве на значения из других массивов.
7
+ *
8
+ * ### Описание
9
+ *
10
+ * Функция `array_replace_recursive` используется для рекурсивной замены значений в массиве на значения из других массивов.
11
+ * Она поддерживает как обычные массивы, так и ассоциативные массивы (объекты с ключами и значениями).
12
+ *
13
+ * ### Параметры
14
+ *
15
+ * - `arr` (object): Исходный массив.
16
+ * - `...replacements` (object[]): Массивы с заменами.
17
+ *
18
+ * ### Возвращаемое значение
19
+ *
20
+ * Возвращает новый массив с рекурсивно заменёнными значениями.
21
+ *
22
+ * ### Примеры использования
23
+ *
24
+ * 1. Рекурсивная замена значений в обычном массиве:
25
+ *
26
+ * ```js
27
+ * const array = [1, 2, [3, 4]];
28
+ * const replacements = { 2: [5, 6] };
29
+ * const result = array_replace_recursive(array, replacements);
30
+ * console.log(result); // [1, 2, [5, 6]]
31
+ * ```
32
+ *
33
+ * 2. Рекурсивная замена значений в ассоциативном массиве:
34
+ *
35
+ * ```js
36
+ * const array = { a: 1, b: { c: 2, d: 3 } };
37
+ * const replacements = { b: { c: 4, e: 5 } };
38
+ * const result = array_replace_recursive(array, replacements);
39
+ * console.log(result); // { a: 1, b: { c: 4, d: 3 } }
40
+ * ```
41
+ *
42
+ * 3. Возвращение массива без изменений, если замены не указаны:
43
+ *
44
+ * ```js
45
+ * const array = [1, 2, 3];
46
+ * const replacements = {};
47
+ * const result = array_replace_recursive(array, replacements);
48
+ * console.log(result); // [1, 2, 3]
49
+ * ```
50
+ *
51
+ * 4. Возвращение массива без изменений, если замены не соответствуют ключам:
52
+ *
53
+ * ```js
54
+ * const array = [1, 2, 3];
55
+ * const replacements = { 3: 4, 4: 5 };
56
+ * const result = array_replace_recursive(array, replacements);
57
+ * console.log(result); // [1, 2, 3]
58
+ * ```
59
+ *
60
+ * 5. Обработка значений, не являющихся массивами:
61
+ *
62
+ * ```js
63
+ * try {
64
+ * const result = array_replace_recursive('not an array', { 1: 4 });
65
+ * } catch (e) {
66
+ * console.error(e.message); // Параметр "arr" должен быть массивом.
67
+ * }
68
+ * ```
69
+ *
70
+ * 6. Обработка значений замен, не являющихся массивами:
71
+ *
72
+ * ```js
73
+ * try {
74
+ * const result = array_replace_recursive([1, 2, 3], 'not an array');
75
+ * } catch (e) {
76
+ * console.error(e.message); // Параметр "replacements" должен быть массивом.
77
+ * }
78
+ * ```
79
+ *
80
+ * @param {object} arr Исходный массив.
81
+ * @param {object[]} replacements Массивы с заменами.
82
+ * @returns {object} Возвращает новый массив с рекурсивно заменёнными значениями.
83
+ * @throws {TypeError} Если параметр не является массивом или если параметр replacements не является массивом.
84
+ */
85
+ export default function array_replace_recursive(arr, ...replacements) {
86
+ if (!is_array(arr)) {
87
+ throw new TypeError('Параметр "arr" должен быть массивом.');
88
+ }
89
+
90
+ if (!replacements.every((replacement) => is_array(replacement))) {
91
+ throw new TypeError('Параметр "replacements" должен быть массивом.');
92
+ }
93
+
94
+ const result = is_list(arr) ? Array.from(arr) : array(arr);
95
+
96
+ for (const replacement of replacements) {
97
+ for (const [k, v] of Object.entries(replacement)) {
98
+ if (k in result) {
99
+ if (is_array(v) && is_array(result[k])) {
100
+ result[k] = array_replace_recursive(result[k], v);
101
+ } else {
102
+ result[k] = v;
103
+ }
104
+ }
105
+ }
106
+ }
107
+
108
+ return result;
109
+ }
@@ -0,0 +1,62 @@
1
+ import is_array from '../is_array.mjs';
2
+ import is_list from '../is_list.mjs';
3
+
4
+ /**
5
+ * Переворачивает массив, изменяя порядок его элементов на обратный.
6
+ *
7
+ * ### Описание
8
+ *
9
+ * Функция `array_reverse` используется для переворачивания массива, изменяя порядок его элементов на обратный.
10
+ * Она поддерживает как обычные массивы, так и ассоциативные массивы (объекты с ключами и значениями).
11
+ *
12
+ * ### Параметры
13
+ *
14
+ * - `arr` (object): Исходный массив.
15
+ *
16
+ * ### Возвращаемое значение
17
+ *
18
+ * Возвращает новый массив с элементами в обратном порядке.
19
+ *
20
+ * ### Примеры использования
21
+ *
22
+ * 1. Переворачивание обычного массива:
23
+ *
24
+ * ```js
25
+ * const array = [1, 2, 3];
26
+ * const result = array_reverse(array);
27
+ * console.log(result); // [3, 2, 1]
28
+ * ```
29
+ *
30
+ * 2. Переворачивание ассоциативного массива:
31
+ *
32
+ * ```js
33
+ * const array = { a: 1, b: 2, c: 3 };
34
+ * const result = array_reverse(array);
35
+ * console.log(result); // [['c', 3], ['b', 2], ['a', 1]]
36
+ * ```
37
+ *
38
+ * 3. Обработка значений, не являющихся массивами:
39
+ *
40
+ * ```js
41
+ * try {
42
+ * const result = array_reverse('not an array');
43
+ * } catch (e) {
44
+ * console.error(e.message); // Параметр "arr" должен быть массивом.
45
+ * }
46
+ * ```
47
+ *
48
+ * @param {object} arr Исходный массив.
49
+ * @returns {object} Возвращает новый массив с элементами в обратном порядке.
50
+ * @throws {TypeError} Если параметр не является массивом.
51
+ */
52
+ export default function array_reverse(arr) {
53
+ if (!is_array(arr)) {
54
+ throw new TypeError('Параметр "arr" должен быть массивом.');
55
+ }
56
+
57
+ if (is_list(arr)) {
58
+ return arr.reverse();
59
+ }
60
+
61
+ return Object.entries(arr).reverse();
62
+ }
@@ -0,0 +1,104 @@
1
+ import is_array from '../is_array.mjs';
2
+ import is_bool from '../is_bool.mjs';
3
+ import is_function from '../is_function.mjs';
4
+ import is_int from '../is_int.mjs';
5
+
6
+ /**
7
+ * Ищет значение в массиве и возвращает ключ первого найденного элемента.
8
+ *
9
+ * ### Описание
10
+ *
11
+ * Функция `array_search` используется для поиска значения в массиве и возвращает ключ первого найденного элемента.
12
+ * Она поддерживает как обычные массивы, так и ассоциативные массивы (объекты с ключами и значениями).
13
+ * Функция может работать в строгом режиме, сравнивая значения с учетом типа.
14
+ * Также можно передать функцию для поиска, которая будет применяться к каждому элементу массива.
15
+ *
16
+ * ### Параметры
17
+ *
18
+ * - `arr` (object): Исходный массив.
19
+ * - `value` (any): Значение для поиска или функция для поиска.
20
+ * - `strict` (boolean): Флаг строгого сравнения. По умолчанию `false`.
21
+ *
22
+ * ### Возвращаемое значение
23
+ *
24
+ * Возвращает ключ первого найденного элемента. Если значение не найдено, возвращает `null`.
25
+ *
26
+ * ### Примеры использования
27
+ *
28
+ * 1. Поиск значения в обычном массиве:
29
+ *
30
+ * ```js
31
+ * const array = [1, 2, 3, 4, 5];
32
+ * const result = array_search(array, 3);
33
+ * console.log(result); // 2
34
+ * ```
35
+ *
36
+ * 2. Поиск значения в ассоциативном массиве:
37
+ *
38
+ * ```js
39
+ * const array = { a: 1, b: 2, c: 3 };
40
+ * const result = array_search(array, 2);
41
+ * console.log(result); // 'b'
42
+ * ```
43
+ *
44
+ * 3. Поиск значения с использованием строгого сравнения:
45
+ *
46
+ * ```js
47
+ * const array = [1, '2', 3];
48
+ * const result = array_search(array, 2, true);
49
+ * console.log(result); // null
50
+ * ```
51
+ *
52
+ * 4. Поиск значения с использованием функции:
53
+ *
54
+ * ```js
55
+ * const array = [1, 2, 3, 4, 5];
56
+ * const result = array_search(array, (v) => v > 3);
57
+ * console.log(result); // 3
58
+ * ```
59
+ *
60
+ * 5. Обработка значений, не являющихся массивами:
61
+ *
62
+ * ```js
63
+ * try {
64
+ * const result = array_search('not an array', 1);
65
+ * } catch (e) {
66
+ * console.error(e.message); // Параметр "arr" должен быть массивом.
67
+ * }
68
+ * ```
69
+ *
70
+ * @param {object} arr Исходный массив.
71
+ * @param {any} value Значение для поиска или функция для поиска.
72
+ * @param {boolean} [strict=false] Флаг строгого сравнения.
73
+ * @returns {any} Возвращает ключ первого найденного элемента. Если значение не найдено, возвращает `null`.
74
+ * @throws {TypeError} Если параметр не является массивом или если параметр strict не является логическим значением.
75
+ */
76
+ export default function array_search(arr, value, strict = false) {
77
+ if (!is_array(arr)) {
78
+ throw new TypeError('Параметр "arr" должен быть массивом.');
79
+ }
80
+
81
+ if (!is_bool(strict)) {
82
+ throw new TypeError('Параметр "strict" должен иметь логический тип.');
83
+ }
84
+
85
+ if (is_function(value)) {
86
+ for (const [k, v] of Object.entries(arr)) {
87
+ if (value(v)) {
88
+ return is_int(Number(k)) ? Number(k) : k;
89
+ }
90
+ }
91
+
92
+ return null;
93
+ }
94
+
95
+ const compare_func = strict ? (v) => Object.is(v, value) : (v) => v == value;
96
+
97
+ for (const [k, v] of Object.entries(arr)) {
98
+ if (compare_func(v)) {
99
+ return is_int(Number(k)) ? Number(k) : k;
100
+ }
101
+ }
102
+
103
+ return null;
104
+ }
@@ -0,0 +1,78 @@
1
+ import is_array from '../is_array.mjs';
2
+ import is_list from '../is_list.mjs';
3
+
4
+ /**
5
+ * Удаляет и возвращает первый элемент массива.
6
+ *
7
+ * ### Описание
8
+ *
9
+ * Функция `array_shift` используется для удаления и возврата первого элемента массива.
10
+ * Она поддерживает как обычные массивы, так и ассоциативные массивы (объекты с ключами и значениями).
11
+ *
12
+ * ### Параметры
13
+ *
14
+ * - `arr` (object): Исходный массив.
15
+ *
16
+ * ### Возвращаемое значение
17
+ *
18
+ * Возвращает первый элемент массива. Если массив пустой, возвращает `null`.
19
+ *
20
+ * ### Примеры использования
21
+ *
22
+ * 1. Удаление и возврат первого элемента обычного массива:
23
+ *
24
+ * ```js
25
+ * const array = [1, 2, 3];
26
+ * const result = array_shift(array);
27
+ * console.log(result); // 1
28
+ * console.log(array); // [2, 3]
29
+ * ```
30
+ *
31
+ * 2. Удаление и возврат первого элемента ассоциативного массива:
32
+ *
33
+ * ```js
34
+ * const array = { a: 1, b: 2, c: 3 };
35
+ * const result = array_shift(array);
36
+ * console.log(result); // 1
37
+ * console.log(array); // { b: 2, c: 3 }
38
+ * ```
39
+ *
40
+ * 3. Обработка пустого массива:
41
+ *
42
+ * ```js
43
+ * const array = [];
44
+ * const result = array_shift(array);
45
+ * console.log(result); // null
46
+ * ```
47
+ *
48
+ * 4. Обработка значений, не являющихся массивами:
49
+ *
50
+ * ```js
51
+ * try {
52
+ * const result = array_shift('not an array');
53
+ * } catch (e) {
54
+ * console.error(e.message); // Параметр "arr" должен быть массивом.
55
+ * }
56
+ * ```
57
+ *
58
+ * @param {object} arr Исходный массив.
59
+ * @returns {any} Возвращает первый элемент массива. Если массив пустой, возвращает `null`.
60
+ * @throws {TypeError} Если параметр не является массивом.
61
+ */
62
+ export default function array_shift(arr) {
63
+ if (!is_array(arr)) {
64
+ throw new TypeError('Параметр "arr" должен быть массивом.');
65
+ }
66
+
67
+ if (is_list(arr)) {
68
+ return arr.shift() ?? null;
69
+ }
70
+
71
+ for (const [k, v] of Object.entries(arr)) {
72
+ delete arr[k];
73
+
74
+ return v;
75
+ }
76
+
77
+ return null;
78
+ }