@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,72 @@
1
+ import array_uintersect_uassoc from './array_uintersect_uassoc.mjs';
2
+
3
+ /**
4
+ * Вычисляет пересечение между массивами с использованием пользовательской функции сравнения для значений.
5
+ *
6
+ * ### Описание
7
+ *
8
+ * Функция `array_uintersect` используется для вычисления пересечения между массивами с использованием пользовательской функции сравнения для значений.
9
+ * Она возвращает массив, содержащий элементы из первого массива, которые присутствуют в других массивах.
10
+ *
11
+ * ### Параметры
12
+ *
13
+ * - `value_compare_func` (function): Функция для сравнения значений.
14
+ * - `original_array` (array): Исходный массив.
15
+ * - `...arrays` (array): Массивы для сравнения.
16
+ *
17
+ * ### Возвращаемое значение
18
+ *
19
+ * Возвращает массив, содержащий элементы из первого массива, которые присутствуют в других массивах.
20
+ *
21
+ * ### Примеры использования
22
+ *
23
+ * 1. Сравнение массивов с использованием пользовательской функции сравнения:
24
+ *
25
+ * ```js
26
+ * const value_compare_func = (a, b) => a === b;
27
+ * const original_array = { a: 1, b: 2, c: 3 };
28
+ * const array1 = { a: 1, b: 2 };
29
+ * const array2 = { b: 2, c: 3 };
30
+ * const result = array_uintersect(value_compare_func, original_array, array1, array2);
31
+ * console.log(result); // { a: 1, b: 2, c: 3 }
32
+ * ```
33
+ *
34
+ * 2. Обработка пустых массивов:
35
+ *
36
+ * ```js
37
+ * const value_compare_func = (a, b) => a === b;
38
+ * const original_array = {};
39
+ * const array1 = {};
40
+ * const result = array_uintersect(value_compare_func, original_array, array1);
41
+ * console.log(result); // {}
42
+ * ```
43
+ *
44
+ * 3. Обработка значений, не являющихся массивами:
45
+ *
46
+ * ```js
47
+ * try {
48
+ * const result = array_uintersect('not a function', 'not an array');
49
+ * } catch (e) {
50
+ * console.error(e.message); // Параметр "value_compare_func" должен быть функцией.
51
+ * }
52
+ * ```
53
+ *
54
+ * 4. Сравнение массивов с различными типами данных:
55
+ *
56
+ * ```js
57
+ * const value_compare_func = (a, b) => a === b;
58
+ * const original_array = { a: 1, b: '2', c: true };
59
+ * const array1 = { a: 1, b: 2, d: false };
60
+ * const result = array_uintersect(value_compare_func, original_array, array1);
61
+ * console.log(result); // { a: 1 }
62
+ * ```
63
+ *
64
+ * @param {function} value_compare_func Функция для сравнения значений.
65
+ * @param {object} original_array Исходный массив.
66
+ * @param {...object} arrays Массивы для сравнения.
67
+ * @returns {object} Возвращает массив, содержащий элементы из первого массива, которые присутствуют в других массивах.
68
+ * @throws {TypeError} Если параметры не являются функциями или массивами.
69
+ */
70
+ export default function array_uintersect(value_compare_func, original_array, ...arrays) {
71
+ return array_uintersect_uassoc(value_compare_func, () => true, original_array, ...arrays);
72
+ }
@@ -0,0 +1,77 @@
1
+ import array_uintersect_uassoc from './array_uintersect_uassoc.mjs';
2
+
3
+ /**
4
+ * Вычисляет пересечение между массивами с использованием пользовательской функции сравнения для значений и стандартной функции сравнения для ключей.
5
+ *
6
+ * ### Описание
7
+ *
8
+ * Функция `array_uintersect_assoc` используется для вычисления пересечения между массивами с использованием пользовательской функции сравнения для значений и стандартной функции сравнения для ключей.
9
+ * Она возвращает массив, содержащий элементы из первого массива, которые присутствуют в других массивах.
10
+ *
11
+ * ### Параметры
12
+ *
13
+ * - `value_compare_func` (function): Функция для сравнения значений.
14
+ * - `original_array` (array): Исходный массив.
15
+ * - `...arrays` (array): Массивы для сравнения.
16
+ *
17
+ * ### Возвращаемое значение
18
+ *
19
+ * Возвращает массив, содержащий элементы из первого массива, которые присутствуют в других массивах.
20
+ *
21
+ * ### Примеры использования
22
+ *
23
+ * 1. Сравнение массивов с использованием пользовательской функции сравнения:
24
+ *
25
+ * ```js
26
+ * const value_compare_func = (a, b) => a === b;
27
+ * const original_array = { a: 1, b: 2, c: 3 };
28
+ * const array1 = { a: 1, b: 2 };
29
+ * const array2 = { b: 2, c: 3 };
30
+ * const result = array_uintersect_assoc(value_compare_func, original_array, array1, array2);
31
+ * console.log(result); // { a: 1, b: 2, c: 3 }
32
+ * ```
33
+ *
34
+ * 2. Обработка пустых массивов:
35
+ *
36
+ * ```js
37
+ * const value_compare_func = (a, b) => a === b;
38
+ * const original_array = {};
39
+ * const array1 = {};
40
+ * const result = array_uintersect_assoc(value_compare_func, original_array, array1);
41
+ * console.log(result); // {}
42
+ * ```
43
+ *
44
+ * 3. Обработка значений, не являющихся массивами:
45
+ *
46
+ * ```js
47
+ * try {
48
+ * const result = array_uintersect_assoc('not a function', 'not an array');
49
+ * } catch (e) {
50
+ * console.error(e.message); // Параметр "value_compare_func" должен быть функцией.
51
+ * }
52
+ * ```
53
+ *
54
+ * 4. Сравнение массивов с различными типами данных:
55
+ *
56
+ * ```js
57
+ * const value_compare_func = (a, b) => a === b;
58
+ * const original_array = { a: 1, b: '2', c: true };
59
+ * const array1 = { a: 1, b: 2, d: false };
60
+ * const result = array_uintersect_assoc(value_compare_func, original_array, array1);
61
+ * console.log(result); // { a: 1 }
62
+ * ```
63
+ *
64
+ * @param {function} value_compare_func Функция для сравнения значений.
65
+ * @param {object} original_array Исходный массив.
66
+ * @param {...object} arrays Массивы для сравнения.
67
+ * @returns {object} Возвращает массив, содержащий элементы из первого массива, которые присутствуют в других массивах.
68
+ * @throws {TypeError} Если параметры не являются функциями или массивами.
69
+ */
70
+ export default function array_uintersect_assoc(value_compare_func, original_array, ...arrays) {
71
+ return array_uintersect_uassoc(
72
+ value_compare_func,
73
+ (a, b) => a === b,
74
+ original_array,
75
+ ...arrays,
76
+ );
77
+ }
@@ -0,0 +1,121 @@
1
+ import is_array from '../is_array.mjs';
2
+ import is_function from '../is_function.mjs';
3
+
4
+ /**
5
+ * Вычисляет пересечение между массивами с использованием пользовательских функций сравнения для значений и ключей.
6
+ *
7
+ * ### Описание
8
+ *
9
+ * Функция `array_uintersect_uassoc` используется для вычисления пересечения между массивами с использованием пользовательских функций сравнения для значений и ключей.
10
+ * Она возвращает массив, содержащий элементы из первого массива, которые присутствуют в других массивах.
11
+ *
12
+ * ### Параметры
13
+ *
14
+ * - `value_compare_func` (function): Функция для сравнения значений.
15
+ * - `key_compare_func` (function): Функция для сравнения ключей.
16
+ * - `original_array` (array): Исходный массив.
17
+ * - `...arrays` (array): Массивы для сравнения.
18
+ *
19
+ * ### Возвращаемое значение
20
+ *
21
+ * Возвращает массив, содержащий элементы из первого массива, которые присутствуют в других массивах.
22
+ *
23
+ * ### Примеры использования
24
+ *
25
+ * 1. Сравнение массивов с использованием пользовательских функций сравнения:
26
+ *
27
+ * ```js
28
+ * const value_compare_func = (a, b) => a === b;
29
+ * const key_compare_func = (a, b) => a === b;
30
+ * const original_array = { a: 1, b: 2, c: 3 };
31
+ * const array1 = { a: 1, b: 2 };
32
+ * const array2 = { b: 2, c: 3 };
33
+ * const result = array_uintersect_uassoc(value_compare_func, key_compare_func, original_array, array1, array2);
34
+ * console.log(result); // { a: 1, b: 2, c: 3 }
35
+ * ```
36
+ *
37
+ * 2. Обработка пустых массивов:
38
+ *
39
+ * ```js
40
+ * const value_compare_func = (a, b) => a === b;
41
+ * const key_compare_func = (a, b) => a === b;
42
+ * const original_array = {};
43
+ * const array1 = {};
44
+ * const result = array_uintersect_uassoc(value_compare_func, key_compare_func, original_array, array1);
45
+ * console.log(result); // {}
46
+ * ```
47
+ *
48
+ * 3. Обработка значений, не являющихся массивами:
49
+ *
50
+ * ```js
51
+ * try {
52
+ * const result = array_uintersect_uassoc('not a function', 'not a function', 'not an array');
53
+ * } catch (e) {
54
+ * console.error(e.message); // Параметр "value_compare_func" должен быть функцией.
55
+ * }
56
+ * ```
57
+ *
58
+ * 4. Сравнение массивов с различными типами данных:
59
+ *
60
+ * ```js
61
+ * const value_compare_func = (a, b) => a === b;
62
+ * const key_compare_func = (a, b) => a === b;
63
+ * const original_array = { a: 1, b: '2', c: true };
64
+ * const array1 = { a: 1, b: 2, d: false };
65
+ * const result = array_uintersect_uassoc(value_compare_func, key_compare_func, original_array, array1);
66
+ * console.log(result); // {}
67
+ * ```
68
+ *
69
+ * @param {function} value_compare_func Функция для сравнения значений.
70
+ * @param {function} key_compare_func Функция для сравнения ключей.
71
+ * @param {object} original_array Исходный массив.
72
+ * @param {...object} arrays Массивы для сравнения.
73
+ * @returns {object} Возвращает массив, содержащий элементы из первого массива, которые присутствуют в других массивах.
74
+ * @throws {TypeError} Если параметры не являются функциями или массивами.
75
+ */
76
+ export default function array_uintersect_uassoc(
77
+ value_compare_func,
78
+ key_compare_func,
79
+ original_array,
80
+ ...arrays
81
+ ) {
82
+ if (!is_function(value_compare_func)) {
83
+ throw new TypeError('Параметр "value_compare_func" должен быть функцией.');
84
+ }
85
+
86
+ if (!is_function(key_compare_func)) {
87
+ throw new TypeError('Параметр "key_compare_func" должен быть функцией.');
88
+ }
89
+
90
+ if (!is_array(original_array)) {
91
+ throw new TypeError('Параметр "original_array" должен быть массивом.');
92
+ }
93
+
94
+ if (!arrays.every((v) => is_array(v))) {
95
+ throw new TypeError('Параметр "arrays" должен быть массивом.');
96
+ }
97
+
98
+ const result = {};
99
+
100
+ // Перебираем исходный массив
101
+ for (const original_key in original_array) {
102
+ const original_value = original_array[original_key];
103
+
104
+ // Каждую пару ключ-значение из исходного массива мы сравниваем с парами из массивов для сравнения.
105
+ // Если совпадение найдено, записываем ее в результат.
106
+ for (const array of arrays) {
107
+ for (const key in array) {
108
+ const value = array[key];
109
+
110
+ if (
111
+ key_compare_func(original_key, key) &&
112
+ value_compare_func(original_value, value)
113
+ ) {
114
+ result[original_key] = original_value;
115
+ }
116
+ }
117
+ }
118
+ }
119
+
120
+ return result;
121
+ }
@@ -0,0 +1,77 @@
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_unique` используется для удаления дублирующихся значений из массива.
11
+ * Она поддерживает как обычные массивы, так и ассоциативные массивы (объекты с ключами и значениями).
12
+ *
13
+ * ### Параметры
14
+ *
15
+ * - `arr` (object): Исходный массив.
16
+ *
17
+ * ### Возвращаемое значение
18
+ *
19
+ * Возвращает новый массив без дублирующихся значений.
20
+ *
21
+ * ### Примеры использования
22
+ *
23
+ * 1. Удаление дублирующихся значений из обычного массива:
24
+ *
25
+ * ```js
26
+ * const array = [1, 2, 2, 3, 4, 4, 5];
27
+ * const result = array_unique(array);
28
+ * console.log(result); // [1, 2, 3, 4, 5]
29
+ * ```
30
+ *
31
+ * 2. Удаление дублирующихся значений из ассоциативного массива:
32
+ *
33
+ * ```js
34
+ * const array = { a: 1, b: 2, c: 2, d: 3, e: 4, f: 4, g: 5 };
35
+ * const result = array_unique(array);
36
+ * console.log(result); // { a: 1, b: 2, d: 3, e: 4, g: 5 }
37
+ * ```
38
+ *
39
+ * 3. Обработка значений, не являющихся массивами:
40
+ *
41
+ * ```js
42
+ * try {
43
+ * const result = array_unique('not an array');
44
+ * } catch (e) {
45
+ * console.error(e.message); // Параметр "arr" должен быть массивом.
46
+ * }
47
+ * ```
48
+ *
49
+ * @param {object} arr Исходный массив.
50
+ * @returns {object} Возвращает новый массив без дублирующихся значений.
51
+ * @throws {TypeError} Если параметр не является массивом.
52
+ */
53
+ export default function array_unique(arr) {
54
+ if (!is_array(arr)) {
55
+ throw new TypeError('Параметр "arr" должен быть массивом.');
56
+ }
57
+
58
+ if (is_list(arr)) {
59
+ return arr.reduce((carry, v) => {
60
+ if (!carry.includes(v)) {
61
+ carry.push(v);
62
+ }
63
+
64
+ return carry;
65
+ }, []);
66
+ }
67
+
68
+ const result = array({});
69
+
70
+ for (const [k, v] of Object.entries(arr)) {
71
+ if (!Object.values(result).includes(v)) {
72
+ result[k] = v;
73
+ }
74
+ }
75
+
76
+ return result;
77
+ }
@@ -0,0 +1,64 @@
1
+ import is_array from '../is_array.mjs';
2
+ import array_splice from './array_splice.mjs';
3
+
4
+ /**
5
+ * Добавляет один или несколько элементов в начало массива.
6
+ *
7
+ * ### Описание
8
+ *
9
+ * Функция `array_unshift` используется для добавления одного или нескольких элементов в начало массива.
10
+ * Она поддерживает как обычные массивы, так и ассоциативные массивы (объекты с ключами и значениями).
11
+ *
12
+ * ### Параметры
13
+ *
14
+ * - `arr` (object): Исходный массив.
15
+ * - `...values` (any[]): Элементы для добавления в начало массива.
16
+ *
17
+ * ### Возвращаемое значение
18
+ *
19
+ * Возвращает новую длину массива после добавления элементов.
20
+ *
21
+ * ### Примеры использования
22
+ *
23
+ * 1. Добавление элементов в обычный массив:
24
+ *
25
+ * ```js
26
+ * const array = [2, 3, 4];
27
+ * const result = array_unshift(array, 0, 1);
28
+ * console.log(result); // 5
29
+ * console.log(array); // [0, 1, 2, 3, 4]
30
+ * ```
31
+ *
32
+ * 2. Добавление элементов в ассоциативный массив:
33
+ *
34
+ * ```js
35
+ * const array = { b: 2, c: 3 };
36
+ * const result = array_unshift(array, { a: 1 });
37
+ * console.log(result); // 3
38
+ * console.log(array); // { a: 1, b: 2, c: 3 }
39
+ * ```
40
+ *
41
+ * 3. Обработка значений, не являющихся массивами:
42
+ *
43
+ * ```js
44
+ * try {
45
+ * const result = array_unshift('not an array', 1);
46
+ * } catch (e) {
47
+ * console.error(e.message); // Параметр "arr" должен быть массивом.
48
+ * }
49
+ * ```
50
+ *
51
+ * @param {object} arr Исходный массив.
52
+ * @param {...any} values Элементы для добавления в начало массива.
53
+ * @returns {number} Возвращает новую длину массива после добавления элементов.
54
+ * @throws {TypeError} Если параметр не является массивом.
55
+ */
56
+ export default function array_unshift(arr, ...values) {
57
+ if (!is_array(arr)) {
58
+ throw new TypeError('Параметр "arr" должен быть массивом.');
59
+ }
60
+
61
+ array_splice(arr, 0, 0, ...values);
62
+
63
+ return Object.keys(arr).length;
64
+ }
@@ -0,0 +1,57 @@
1
+ import is_array from '../is_array.mjs';
2
+
3
+ /**
4
+ * Возвращает массив значений из переданного массива или объекта.
5
+ *
6
+ * ### Описание
7
+ *
8
+ * Функция `array_values` используется для извлечения всех значений из переданного массива или объекта.
9
+ * Она поддерживает как обычные массивы, так и ассоциативные массивы (объекты с ключами и значениями).
10
+ *
11
+ * ### Параметры
12
+ *
13
+ * - `arr` (object): Исходный массив или объект.
14
+ *
15
+ * ### Возвращаемое значение
16
+ *
17
+ * Возвращает массив значений из переданного массива или объекта.
18
+ *
19
+ * ### Примеры использования
20
+ *
21
+ * 1. Извлечение значений из обычного массива:
22
+ *
23
+ * ```js
24
+ * const array = [1, 2, 3];
25
+ * const result = array_values(array);
26
+ * console.log(result); // [1, 2, 3]
27
+ * ```
28
+ *
29
+ * 2. Извлечение значений из ассоциативного массива:
30
+ *
31
+ * ```js
32
+ * const array = { a: 1, b: 2, c: 3 };
33
+ * const result = array_values(array);
34
+ * console.log(result); // [1, 2, 3]
35
+ * ```
36
+ *
37
+ * 3. Обработка значений, не являющихся массивами:
38
+ *
39
+ * ```js
40
+ * try {
41
+ * const result = array_values('not an array');
42
+ * } catch (e) {
43
+ * console.error(e.message); // Параметр "arr" должен быть массивом.
44
+ * }
45
+ * ```
46
+ *
47
+ * @param {object} arr Исходный массив или объект.
48
+ * @returns {any[]} Возвращает массив значений из переданного массива или объекта.
49
+ * @throws {TypeError} Если параметр не является массивом или объектом.
50
+ */
51
+ export default function array_values(arr) {
52
+ if (!is_array(arr)) {
53
+ throw new TypeError('Параметр "arr" должен быть массивом.');
54
+ }
55
+
56
+ return Object.values(arr);
57
+ }
@@ -0,0 +1,95 @@
1
+ import is_array from '../is_array.mjs';
2
+ import is_function from '../is_function.mjs';
3
+
4
+ /**
5
+ * Применяет пользовательскую функцию к каждому элементу массива.
6
+ *
7
+ * ### Описание
8
+ *
9
+ * Функция `array_walk` используется для применения пользовательской функции к каждому элементу массива.
10
+ * Она поддерживает как обычные массивы, так и ассоциативные массивы (объекты с ключами и значениями).
11
+ *
12
+ * ### Параметры
13
+ *
14
+ * - `arr` (object): Исходный массив.
15
+ * - `callback` (function): Функция, которая будет применена к каждому элементу массива.
16
+ * - `arg` (any): Дополнительный аргумент, который будет передан в функцию обратного вызова. По умолчанию `null`.
17
+ *
18
+ * ### Возвращаемое значение
19
+ *
20
+ * Возвращает `true` после успешного выполнения функции для всех элементов массива.
21
+ *
22
+ * ### Примеры использования
23
+ *
24
+ * 1. Применение функции к каждому элементу обычного массива:
25
+ *
26
+ * ```js
27
+ * const array = [1, 2, 3];
28
+ * array_walk(array, (value, key) => {
29
+ * console.log(`Ключ: ${key}, Значение: ${value}`);
30
+ * });
31
+ * // Вывод:
32
+ * // Ключ: 0, Значение: 1
33
+ * // Ключ: 1, Значение: 2
34
+ * // Ключ: 2, Значение: 3
35
+ * ```
36
+ *
37
+ * 2. Применение функции к каждому элементу ассоциативного массива:
38
+ *
39
+ * ```js
40
+ * const array = { a: 1, b: 2, c: 3 };
41
+ * array_walk(array, (value, key) => {
42
+ * console.log(`Ключ: ${key}, Значение: ${value}`);
43
+ * });
44
+ * // Вывод:
45
+ * // Ключ: a, Значение: 1
46
+ * // Ключ: b, Значение: 2
47
+ * // Ключ: c, Значение: 3
48
+ * ```
49
+ *
50
+ * 3. Применение функции с дополнительным аргументом:
51
+ *
52
+ * ```js
53
+ * const array = [1, 2, 3];
54
+ * array_walk(array, (value, key, arg) => {
55
+ * console.log(`Ключ: ${key}, Значение: ${value}, Аргумент: ${arg}`);
56
+ * }, 'дополнительный аргумент');
57
+ * // Вывод:
58
+ * // Ключ: 0, Значение: 1, Аргумент: дополнительный аргумент
59
+ * // Ключ: 1, Значение: 2, Аргумент: дополнительный аргумент
60
+ * // Ключ: 2, Значение: 3, Аргумент: дополнительный аргумент
61
+ * ```
62
+ *
63
+ * 4. Обработка значений, не являющихся массивами:
64
+ *
65
+ * ```js
66
+ * try {
67
+ * array_walk('not an array', (value, key) => {
68
+ * console.log(`Ключ: ${key}, Значение: ${value}`);
69
+ * });
70
+ * } catch (e) {
71
+ * console.error(e.message); // Параметр "arr" должен быть массивом.
72
+ * }
73
+ * ```
74
+ *
75
+ * @param {object} arr Исходный массив.
76
+ * @param {function} callback Функция, которая будет применена к каждому элементу массива.
77
+ * @param {any} [arg=null] Дополнительный аргумент, который будет передан в функцию обратного вызова.
78
+ * @returns {boolean} Возвращает `true` после успешного выполнения функции для всех элементов массива.
79
+ * @throws {TypeError} Если параметры не являются массивом или функцией.
80
+ */
81
+ export default function array_walk(arr, callback, arg = null) {
82
+ if (!is_array(arr)) {
83
+ throw new TypeError('Параметр "arr" должен быть массивом.');
84
+ }
85
+
86
+ if (!is_function(callback)) {
87
+ throw new TypeError('Параметр "callback" должен быть функцией.');
88
+ }
89
+
90
+ for (const [k, v] of Object.entries(arr)) {
91
+ callback(v, k, arg);
92
+ }
93
+
94
+ return true;
95
+ }
@@ -0,0 +1,104 @@
1
+ import is_array from '../is_array.mjs';
2
+ import is_function from '../is_function.mjs';
3
+
4
+ /**
5
+ * Применяет пользовательскую функцию к каждому элементу массива рекурсивно.
6
+ *
7
+ * ### Описание
8
+ *
9
+ * Функция `array_walk_recursive` используется для применения пользовательской функции к каждому элементу массива рекурсивно.
10
+ * Она поддерживает как обычные массивы, так и ассоциативные массивы (объекты с ключами и значениями).
11
+ *
12
+ * ### Параметры
13
+ *
14
+ * - `arr` (object): Исходный массив.
15
+ * - `callback` (function): Функция, которая будет применена к каждому элементу массива.
16
+ * - `arg` (any): Дополнительный аргумент, который будет передан в функцию обратного вызова. По умолчанию `null`.
17
+ *
18
+ * ### Возвращаемое значение
19
+ *
20
+ * Возвращает `true` после успешного выполнения функции для всех элементов массива.
21
+ *
22
+ * ### Примеры использования
23
+ *
24
+ * 1. Применение функции к каждому элементу обычного массива:
25
+ *
26
+ * ```js
27
+ * const array = [1, 2, [3, 4], 5];
28
+ * array_walk_recursive(array, (value, key) => {
29
+ * console.log(`Ключ: ${key}, Значение: ${value}`);
30
+ * });
31
+ * // Вывод:
32
+ * // Ключ: 0, Значение: 1
33
+ * // Ключ: 1, Значение: 2
34
+ * // Ключ: 0, Значение: 3
35
+ * // Ключ: 1, Значение: 4
36
+ * // Ключ: 3, Значение: 5
37
+ * ```
38
+ *
39
+ * 2. Применение функции к каждому элементу ассоциативного массива:
40
+ *
41
+ * ```js
42
+ * const array = { a: 1, b: { c: 2, d: 3 }, e: 4 };
43
+ * array_walk_recursive(array, (value, key) => {
44
+ * console.log(`Ключ: ${key}, Значение: ${value}`);
45
+ * });
46
+ * // Вывод:
47
+ * // Ключ: a, Значение: 1
48
+ * // Ключ: c, Значение: 2
49
+ * // Ключ: d, Значение: 3
50
+ * // Ключ: e, Значение: 4
51
+ * ```
52
+ *
53
+ * 3. Применение функции с дополнительным аргументом:
54
+ *
55
+ * ```js
56
+ * const array = [1, 2, [3, 4], 5];
57
+ * array_walk_recursive(array, (value, key, arg) => {
58
+ * console.log(`Ключ: ${key}, Значение: ${value}, Аргумент: ${arg}`);
59
+ * }, 'дополнительный аргумент');
60
+ * // Вывод:
61
+ * // Ключ: 0, Значение: 1, Аргумент: дополнительный аргумент
62
+ * // Ключ: 1, Значение: 2, Аргумент: дополнительный аргумент
63
+ * // Ключ: 0, Значение: 3, Аргумент: дополнительный аргумент
64
+ * // Ключ: 1, Значение: 4, Аргумент: дополнительный аргумент
65
+ * // Ключ: 3, Значение: 5, Аргумент: дополнительный аргумент
66
+ * ```
67
+ *
68
+ * 4. Обработка значений, не являющихся массивами:
69
+ *
70
+ * ```js
71
+ * try {
72
+ * array_walk_recursive('not an array', (value, key) => {
73
+ * console.log(`Ключ: ${key}, Значение: ${value}`);
74
+ * });
75
+ * } catch (e) {
76
+ * console.error(e.message); // Параметр "arr" должен быть массивом.
77
+ * }
78
+ * ```
79
+ *
80
+ * @param {object} arr Исходный массив.
81
+ * @param {function} callback Функция, которая будет применена к каждому элементу массива.
82
+ * @param {any} [arg=null] Дополнительный аргумент, который будет передан в функцию обратного вызова.
83
+ * @returns {boolean} Возвращает `true` после успешного выполнения функции для всех элементов массива.
84
+ * @throws {TypeError} Если параметры не являются массивом или функцией.
85
+ */
86
+ export default function array_walk_recursive(arr, callback, arg = null) {
87
+ if (!is_array(arr)) {
88
+ throw new TypeError('Параметр "arr" должен быть массивом.');
89
+ }
90
+
91
+ if (!is_function(callback)) {
92
+ throw new TypeError('Параметр "callback" должен быть функцией.');
93
+ }
94
+
95
+ for (const [k, v] of Object.entries(arr)) {
96
+ if (is_array(v)) {
97
+ array_walk_recursive(v, callback, arg);
98
+ } else {
99
+ callback(v, k, arg);
100
+ }
101
+ }
102
+
103
+ return true;
104
+ }