@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,26 @@
1
+ import array from '../array.mjs';
2
+ import is_list from '../is_list.mjs';
3
+
4
+ export default function array_combine(keys, values) {
5
+ if (!is_list(keys)) {
6
+ throw new TypeError('Параметр "keys" должен быть списком.');
7
+ }
8
+
9
+ if (!is_list(values)) {
10
+ throw new TypeError('Параметр "values" должен быть списком.');
11
+ }
12
+
13
+ if (keys.length !== values.length) {
14
+ throw new Error(
15
+ 'Количество элементов в списке ключей должно ровняться количеству элементов в списке значений.',
16
+ );
17
+ }
18
+
19
+ const result = array({});
20
+
21
+ for (let i = 0; i < keys.length; i++) {
22
+ result[keys[i]] = values[i];
23
+ }
24
+
25
+ return result;
26
+ }
@@ -0,0 +1,82 @@
1
+ import array from '../array.mjs';
2
+ import is_array from '../is_array.mjs';
3
+
4
+ /**
5
+ * Подсчитывает количество значений в массиве.
6
+ *
7
+ * ### Описание
8
+ *
9
+ * Функция `array_count_values` используется для подсчета количества значений в массиве.
10
+ * Если переданное значение не является массивом, функция выбрасывает ошибку типа `TypeError`.
11
+ *
12
+ * ### Параметры
13
+ *
14
+ * - `value` (array): Массив значений, которые необходимо подсчитать.
15
+ *
16
+ * ### Возвращаемое значение
17
+ *
18
+ * Возвращает объект, где ключи представляют уникальные значения из массива, а значения представляют количество их вхождений.
19
+ *
20
+ * ### Примеры использования
21
+ *
22
+ * 1. Подсчет количества значений в массиве:
23
+ *
24
+ * ```js
25
+ * const array = ['a', 'b', 'a', 'c', 'b', 'a'];
26
+ * const result = array_count_values(array);
27
+ * console.log(result); // { a: 3, b: 2, c: 1 }
28
+ * ```
29
+ *
30
+ * 2. Обработка пустого массива:
31
+ *
32
+ * ```js
33
+ * const array = [];
34
+ * const result = array_count_values(array);
35
+ * console.log(result); // {}
36
+ * ```
37
+ *
38
+ * 3. Обработка значений разных типов:
39
+ *
40
+ * ```js
41
+ * const array = [1, '1', true, 'true', null, 'null', undefined, 'undefined'];
42
+ * const result = array_count_values(array);
43
+ * console.log(result); // { 1: 2, true: 2, null: 2, undefined: 2 }
44
+ * ```
45
+ *
46
+ * 4. Обработка значения, не являющегося массивом:
47
+ *
48
+ * ```js
49
+ * try {
50
+ * const result = array_count_values('not an array');
51
+ * } catch (e) {
52
+ * console.error(e.message); // Параметр "value" должен быть массивом.
53
+ * }
54
+ * ```
55
+ *
56
+ * 5. Обработка ассоциативных массивов:
57
+ *
58
+ * ```js
59
+ * const assoc = { key1: 'a', key2: 'b', key3: 'a', key4: 'c' };
60
+ * const result = array_count_values(assoc);
61
+ * console.log(result); // { a: 2, b: 1, c: 1 }
62
+ * ```
63
+ *
64
+ * @param {object} value Массив значений, которые необходимо подсчитать.
65
+ * @returns {object} Возвращает объект, где ключи представляют уникальные значения из массива, а значения представляют количество их вхождений.
66
+ * @throws {TypeError} Если переданное значение не является массивом.
67
+ */
68
+ export default function array_count_values(value) {
69
+ if (!is_array(value)) {
70
+ throw new TypeError('Параметр "value" должен быть массивом.');
71
+ }
72
+
73
+ const result = array({});
74
+
75
+ for (const k in value) {
76
+ const v = String(value[k]);
77
+
78
+ v in result ? result[v]++ : (result[v] = 1);
79
+ }
80
+
81
+ return result;
82
+ }
@@ -0,0 +1,77 @@
1
+ import array_udiff from './array_udiff.mjs';
2
+
3
+ /**
4
+ * Вычисляет расхождение между массивами.
5
+ *
6
+ * ### Описание
7
+ *
8
+ * Функция `array_diff` используется для вычисления расхождения между массивами. Она возвращает ассоциативный массив, содержащий элементы из первого массива, которые отсутствуют в других массивах.
9
+ *
10
+ * ### Параметры
11
+ *
12
+ * - `original_array` (object): Исходный массив.
13
+ * - `...arrays` (object): Массивы для сравнения.
14
+ *
15
+ * ### Возвращаемое значение
16
+ *
17
+ * Возвращает ассоциативный массив, содержащий элементы из первого массива, которые отсутствуют в других массивах.
18
+ *
19
+ * ### Примеры использования
20
+ *
21
+ * 1. Сравнение массивов:
22
+ *
23
+ * ```js
24
+ * const original_array = [1, 2, 3];
25
+ * const array1 = [1, 2];
26
+ * const result = array_diff(original_array, array1);
27
+ * console.log(result); // { 2: 3 }
28
+ * ```
29
+ *
30
+ * 2. Обработка пустых массивов:
31
+ *
32
+ * ```js
33
+ * const original_array = [];
34
+ * const array1 = [];
35
+ * const result = array_diff(original_array, array1);
36
+ * console.log(result); // {}
37
+ * ```
38
+ *
39
+ * 3. Сравнение массивов с различными типами данных:
40
+ *
41
+ * ```js
42
+ * const original_array = [1, '2', true];
43
+ * const array1 = [1, 2, false];
44
+ * const result = array_diff(original_array, array1);
45
+ * console.log(result); // { 1: '2', 2: true }
46
+ * ```
47
+ *
48
+ * 4. Сравнение массивов с объектами:
49
+ *
50
+ * ```js
51
+ * const original_array = [{ id: 1 }, { id: 2 }, { id: 3 }];
52
+ * const array1 = [{ id: 1 }, { id: 2 }];
53
+ * const result = array_diff(original_array, array1);
54
+ * console.log(result); // { 2: { id: 3 } }
55
+ * ```
56
+ *
57
+ * 5. Сравнение ассоциативных массивов:
58
+ *
59
+ * ```js
60
+ * const original_array = { a: 1, b: 2, c: 3 };
61
+ * const array1 = { a: 1, b: 2 };
62
+ * const result = array_diff(original_array, array1);
63
+ * console.log(result); // { c: 3 }
64
+ * ```
65
+ *
66
+ * @param {object} original_array Исходный массив.
67
+ * @param {...object} arrays Массивы для сравнения.
68
+ * @returns {object} Возвращает ассоциативный массив, содержащий элементы из первого массива, которые отсутствуют в других массивах.
69
+ * @throws {TypeError} Если параметры не являются массивами.
70
+ */
71
+ export default function array_diff(original_array, ...arrays) {
72
+ return array_udiff(
73
+ (a, b) => JSON.stringify(a) === JSON.stringify(b),
74
+ original_array,
75
+ ...arrays,
76
+ );
77
+ }
@@ -0,0 +1,56 @@
1
+ import array_diff_uassoc from './array_diff_uassoc.mjs';
2
+
3
+ /**
4
+ * Вычисляет расхождение между массивами с использованием стандартной функции сравнения значений и ключей.
5
+ *
6
+ * ### Описание
7
+ *
8
+ * Функция `array_diff_assoc` используется для вычисления расхождения между массивами с использованием стандартной функции сравнения значений и ключей.
9
+ * Она возвращает ассоциативный массив, содержащий элементы из первого массива, которые отсутствуют в других массивах.
10
+ *
11
+ * ### Параметры
12
+ *
13
+ * - `original_array` (object): Исходный массив.
14
+ * - `...arrays` (object): Массивы для сравнения.
15
+ *
16
+ * ### Возвращаемое значение
17
+ *
18
+ * Возвращает ассоциативный массив, содержащий элементы из первого массива, которые отсутствуют в других массивах.
19
+ *
20
+ * ### Примеры использования
21
+ *
22
+ * 1. Сравнение массивов:
23
+ *
24
+ * ```js
25
+ * const original_array = { a: 1, b: 2, c: 3 };
26
+ * const array1 = { a: 1, b: 2 };
27
+ * const result = array_diff_assoc(original_array, array1);
28
+ * console.log(result); // { c: 3 }
29
+ * ```
30
+ *
31
+ * 2. Обработка пустых массивов:
32
+ *
33
+ * ```js
34
+ * const original_array = {};
35
+ * const array1 = {};
36
+ * const result = array_diff_assoc(original_array, array1);
37
+ * console.log(result); // {}
38
+ * ```
39
+ *
40
+ * 3. Сравнение массивов с различными типами данных:
41
+ *
42
+ * ```js
43
+ * const original_array = { a: 1, b: '2', c: true };
44
+ * const array1 = { a: 1, b: 2, d: false };
45
+ * const result = array_diff_assoc(original_array, array1);
46
+ * console.log(result); // { b: '2', c: true }
47
+ * ```
48
+ *
49
+ * @param {object} original_array Исходный массив.
50
+ * @param {...object} arrays Массивы для сравнения.
51
+ * @returns {object} Возвращает ассоциативный массив, содержащий элементы из первого массива, которые отсутствуют в других массивах.
52
+ * @throws {TypeError} Если параметры не являются массивами.
53
+ */
54
+ export default function array_diff_assoc(original_array, ...arrays) {
55
+ return array_diff_uassoc((a, b) => a === b, original_array, ...arrays);
56
+ }
@@ -0,0 +1,56 @@
1
+ import array_diff_ukey from './array_diff_ukey.mjs';
2
+
3
+ /**
4
+ * Вычисляет расхождение между массивами с использованием стандартной функции сравнения ключей.
5
+ *
6
+ * ### Описание
7
+ *
8
+ * Функция `array_diff_key` используется для вычисления расхождения между массивами с использованием стандартной функции сравнения ключей.
9
+ * Она возвращает ассоциативный массив, содержащий элементы из первого массива, которые отсутствуют в других массивах.
10
+ *
11
+ * ### Параметры
12
+ *
13
+ * - `original_array` (object): Исходный массив.
14
+ * - `...arrays` (object): Массивы для сравнения.
15
+ *
16
+ * ### Возвращаемое значение
17
+ *
18
+ * Возвращает ассоциативный массив, содержащий элементы из первого массива, которые отсутствуют в других массивах.
19
+ *
20
+ * ### Примеры использования
21
+ *
22
+ * 1. Сравнение массивов:
23
+ *
24
+ * ```js
25
+ * const original_array = { a: 1, b: 2, c: 3 };
26
+ * const array1 = { a: 1, b: 2 };
27
+ * const result = array_diff_key(original_array, array1);
28
+ * console.log(result); // { c: 3 }
29
+ * ```
30
+ *
31
+ * 2. Обработка пустых массивов:
32
+ *
33
+ * ```js
34
+ * const original_array = {};
35
+ * const array1 = {};
36
+ * const result = array_diff_key(original_array, array1);
37
+ * console.log(result); // {}
38
+ * ```
39
+ *
40
+ * 3. Сравнение массивов с различными типами данных:
41
+ *
42
+ * ```js
43
+ * const original_array = { a: 1, b: '2', c: true };
44
+ * const array1 = { a: 1, b: 2, d: false };
45
+ * const result = array_diff_key(original_array, array1);
46
+ * console.log(result); // { c: true }
47
+ * ```
48
+ *
49
+ * @param {object} original_array Исходный массив.
50
+ * @param {...object} arrays Массивы для сравнения.
51
+ * @returns {object} Возвращает ассоциативный массив, содержащий элементы из первого массива, которые отсутствуют в других массивах.
52
+ * @throws {TypeError} Если параметры не являются массивами.
53
+ */
54
+ export default function array_diff_key(original_array, ...arrays) {
55
+ return array_diff_ukey((a, b) => a === b, original_array, ...arrays);
56
+ }
@@ -0,0 +1,76 @@
1
+ import array_udiff_uassoc from './array_udiff_uassoc.mjs';
2
+
3
+ /**
4
+ * Вычисляет расхождение между массивами с использованием пользовательской функции сравнения ключей.
5
+ *
6
+ * ### Описание
7
+ *
8
+ * Функция `array_diff_uassoc` используется для вычисления расхождения между массивами с использованием пользовательской функции сравнения ключей.
9
+ * Она возвращает ассоциативный массив, содержащий элементы из первого массива, которые отсутствуют в других массивах.
10
+ *
11
+ * ### Параметры
12
+ *
13
+ * - `key_compare_func` (function): Функция для сравнения ключей.
14
+ * - `original_array` (object): Исходный массив.
15
+ * - `...arrays` (object): Массивы для сравнения.
16
+ *
17
+ * ### Возвращаемое значение
18
+ *
19
+ * Возвращает ассоциативный массив, содержащий элементы из первого массива, которые отсутствуют в других массивах.
20
+ *
21
+ * ### Примеры использования
22
+ *
23
+ * 1. Сравнение массивов с использованием пользовательской функции сравнения:
24
+ *
25
+ * ```js
26
+ * const key_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 result = array_diff_uassoc(key_compare_func, original_array, array1);
30
+ * console.log(result); // { c: 3 }
31
+ * ```
32
+ *
33
+ * 2. Обработка пустых массивов:
34
+ *
35
+ * ```js
36
+ * const key_compare_func = (a, b) => a === b;
37
+ * const original_array = {};
38
+ * const array1 = {};
39
+ * const result = array_diff_uassoc(key_compare_func, original_array, array1);
40
+ * console.log(result); // {}
41
+ * ```
42
+ *
43
+ * 3. Обработка значений, не являющихся массивами:
44
+ *
45
+ * ```js
46
+ * try {
47
+ * const result = array_diff_uassoc('not a function', 'not an array');
48
+ * } catch (e) {
49
+ * console.error(e.message); // Параметр "key_compare_func" должен быть функцией.
50
+ * }
51
+ * ```
52
+ *
53
+ * 4. Сравнение массивов с различными типами данных:
54
+ *
55
+ * ```js
56
+ * const key_compare_func = (a, b) => a === b;
57
+ * const original_array = { a: 1, b: '2', c: true };
58
+ * const array1 = { a: 1, b: 2, d: false };
59
+ * const result = array_diff_uassoc(key_compare_func, original_array, array1);
60
+ * console.log(result); // { c: true }
61
+ * ```
62
+ *
63
+ * @param {function} key_compare_func Функция для сравнения ключей.
64
+ * @param {object} original_array Исходный массив.
65
+ * @param {...object} arrays Массивы для сравнения.
66
+ * @returns {object} Возвращает ассоциативный массив, содержащий элементы из первого массива, которые отсутствуют в других массивах.
67
+ * @throws {TypeError} Если параметры не являются функциями или массивами.
68
+ */
69
+ export default function array_diff_uassoc(key_compare_func, original_array, ...arrays) {
70
+ return array_udiff_uassoc(
71
+ (a, b) => JSON.stringify(a) === JSON.stringify(b),
72
+ key_compare_func,
73
+ original_array,
74
+ ...arrays,
75
+ );
76
+ }
@@ -0,0 +1,71 @@
1
+ import array_udiff_uassoc from './array_udiff_uassoc.mjs';
2
+
3
+ /**
4
+ * Вычисляет расхождение между массивами с использованием пользовательской функции сравнения для ключей.
5
+ *
6
+ * ### Описание
7
+ *
8
+ * Функция `array_diff_ukey` используется для вычисления расхождения между массивами с использованием пользовательской функции сравнения для ключей.
9
+ * Она возвращает ассоциативный массив, содержащий элементы из первого массива, которые отсутствуют в других массивах.
10
+ *
11
+ * ### Параметры
12
+ *
13
+ * - `key_compare_func` (function): Функция для сравнения ключей.
14
+ * - `original_array` (object): Исходный массив.
15
+ * - `...arrays` (object): Массивы для сравнения.
16
+ *
17
+ * ### Возвращаемое значение
18
+ *
19
+ * Возвращает ассоциативный массив, содержащий элементы из первого массива, которые отсутствуют в других массивах.
20
+ *
21
+ * ### Примеры использования
22
+ *
23
+ * 1. Сравнение массивов с использованием пользовательской функции сравнения ключей:
24
+ *
25
+ * ```js
26
+ * const key_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 result = array_diff_ukey(key_compare_func, original_array, array1);
30
+ * console.log(result); // { c: 3 }
31
+ * ```
32
+ *
33
+ * 2. Обработка пустых массивов:
34
+ *
35
+ * ```js
36
+ * const key_compare_func = (a, b) => a === b;
37
+ * const original_array = {};
38
+ * const array1 = {};
39
+ * const result = array_diff_ukey(key_compare_func, original_array, array1);
40
+ * console.log(result); // {}
41
+ * ```
42
+ *
43
+ * 3. Обработка значений, не являющихся массивами:
44
+ *
45
+ * ```js
46
+ * try {
47
+ * const result = array_diff_ukey('not a function', 'not an array');
48
+ * } catch (e) {
49
+ * console.error(e.message); // Параметр "key_compare_func" должен быть функцией.
50
+ * }
51
+ * ```
52
+ *
53
+ * 4. Сравнение массивов с различными типами данных:
54
+ *
55
+ * ```js
56
+ * const key_compare_func = (a, b) => a === b;
57
+ * const original_array = { a: 1, b: '2', c: true };
58
+ * const array1 = { a: 1, b: 2, d: false };
59
+ * const result = array_diff_ukey(key_compare_func, original_array, array1);
60
+ * console.log(result); // { c: true }
61
+ * ```
62
+ *
63
+ * @param {function} key_compare_func Функция для сравнения ключей.
64
+ * @param {object} original_array Исходный массив.
65
+ * @param {...object} arrays Массивы для сравнения.
66
+ * @returns {object} Возвращает ассоциативный массив, содержащий элементы из первого массива, которые отсутствуют в других массивах.
67
+ * @throws {TypeError} Если параметры не являются функциями или массивами.
68
+ */
69
+ export default function array_diff_ukey(key_compare_func, original_array, ...arrays) {
70
+ return array_udiff_uassoc(() => true, key_compare_func, original_array, ...arrays);
71
+ }
@@ -0,0 +1,108 @@
1
+ import array from '../array.mjs';
2
+ import is_array from '../is_array.mjs';
3
+ import is_int from '../is_int.mjs';
4
+ import is_list from '../is_list.mjs';
5
+
6
+ /**
7
+ * Заполняет массив значениями, начиная с указанного индекса.
8
+ *
9
+ * ### Описание
10
+ *
11
+ * Функция `array_fill` используется для заполнения массива значениями, начиная с указанного индекса.
12
+ * Она возвращает массив, содержащий заданное количество элементов, заполненных указанным значением.
13
+ *
14
+ * ### Параметры
15
+ *
16
+ * - `arr` (object): Исходный массив.
17
+ * - `start_index` (number): Индекс, с которого начинается заполнение массива.
18
+ * - `count` (number): Количество элементов для заполнения.
19
+ * - `value` (any): Значение, которым будет заполнен массив.
20
+ *
21
+ * ### Возвращаемое значение
22
+ *
23
+ * Возвращает массив, содержащий заданное количество элементов, заполненных указанным значением.
24
+ *
25
+ * ### Примеры использования
26
+ *
27
+ * 1. Заполнение пустого массива значениями:
28
+ *
29
+ * ```js
30
+ * const result = array_fill([], 0, 3, 'a');
31
+ * console.log(result); // ['a', 'a', 'a']
32
+ * ```
33
+ *
34
+ * 2. Заполнение массива значениями с указанного индекса:
35
+ *
36
+ * ```js
37
+ * const result = array_fill([], 2, 3, 'b');
38
+ * console.log(result); // [undefined, undefined, 'b', 'b', 'b']
39
+ * ```
40
+ *
41
+ * 3. Заполнение существующего массива значениями:
42
+ *
43
+ * ```js
44
+ * const existingArray = [1, 2, 3];
45
+ * const result = array_fill(existingArray, 1, 2, 'c');
46
+ * console.log(result); // [1, 'c', 'c']
47
+ * ```
48
+ *
49
+ * 4. Обработка отрицательных значений для `count`:
50
+ *
51
+ * ```js
52
+ * try {
53
+ * const result = array_fill([], 0, -1, 'd');
54
+ * } catch (e) {
55
+ * console.error(e.message); // Параметр "count" должен быть равен или больше нуля.
56
+ * }
57
+ * ```
58
+ *
59
+ * 5. Обработка значений, не являющихся целыми числами:
60
+ *
61
+ * ```js
62
+ * try {
63
+ * const result = array_fill([], 0.5, 3, 'e');
64
+ * } catch (e) {
65
+ * console.error(e.message); // Параметр "start_index" должен быть целым числом.
66
+ * }
67
+ * ```
68
+ *
69
+ * 6. Заполнение ассоциативного массива значениями:
70
+ *
71
+ * ```js
72
+ * const assocArray = { a: 1, b: 2 };
73
+ * const result = array_fill(assocArray, 2, 3, 'f');
74
+ * console.log(result); // { a: 1, b: 2, 2: 'f', 3: 'f', 4: 'f' }
75
+ * ```
76
+ *
77
+ * @param {object} arr Исходный массив.
78
+ * @param {number} start_index Индекс, с которого начинается заполнение массива.
79
+ * @param {number} count Количество элементов для заполнения.
80
+ * @param {any} value Значение, которым будет заполнен массив.
81
+ * @returns {object} Возвращает массив, содержащий заданное количество элементов, заполненных указанным значением.
82
+ * @throws {TypeError} Если параметры не являются массивами или целыми числами, или если `count` меньше нуля.
83
+ */
84
+ export default function array_fill(arr, start_index, count, value) {
85
+ if (!is_array(arr)) {
86
+ throw new TypeError('Параметр "arr" должен быть массивом.');
87
+ }
88
+
89
+ if (!is_int(start_index)) {
90
+ throw new TypeError('Параметр "start_index" должен быть целым числом.');
91
+ }
92
+
93
+ if (!is_int(count)) {
94
+ throw new TypeError('Параметр "count" должен быть целым числом.');
95
+ }
96
+
97
+ if (count < 0) {
98
+ throw new TypeError('Параметр "count" должен быть равен или больше нуля.');
99
+ }
100
+
101
+ const result = is_list(arr) ? Array.from(arr) : array(arr);
102
+
103
+ for (let index = start_index; index < start_index + count; index++) {
104
+ result[index] = value;
105
+ }
106
+
107
+ return result;
108
+ }
@@ -0,0 +1,90 @@
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_fill_keys` используется для заполнения массива значениями по указанным ключам.
11
+ * Она возвращает массив, содержащий элементы, заполненные указанным значением по указанным ключам.
12
+ *
13
+ * ### Параметры
14
+ *
15
+ * - `arr` (array): Исходный массив.
16
+ * - `keys` (array): Массив ключей, по которым будет происходить заполнение.
17
+ * - `value` (any): Значение, которым будет заполнен массив.
18
+ *
19
+ * ### Возвращаемое значение
20
+ *
21
+ * Возвращает массив, содержащий элементы, заполненные указанным значением по указанным ключам.
22
+ *
23
+ * ### Примеры использования
24
+ *
25
+ * 1. Заполнение пустого массива значениями по ключам:
26
+ *
27
+ * ```js
28
+ * const result = array_fill_keys([], [0, 1, 2], 'a');
29
+ * console.log(result); // ['a', 'a', 'a']
30
+ * ```
31
+ *
32
+ * 2. Заполнение существующего массива значениями по ключам:
33
+ *
34
+ * ```js
35
+ * const existingArray = [1, 2, 3];
36
+ * const result = array_fill_keys(existingArray, [1, 2], 'b');
37
+ * console.log(result); // [1, 'b', 'b']
38
+ * ```
39
+ *
40
+ * 3. Заполнение ассоциативного массива значениями по ключам:
41
+ *
42
+ * ```js
43
+ * const assocArray = { a: 1, b: 2 };
44
+ * const result = array_fill_keys(assocArray, ['c', 'd'], 'c');
45
+ * console.log(result); // { a: 1, b: 2, c: 'c', d: 'c' }
46
+ * ```
47
+ *
48
+ * 4. Обработка значений, не являющихся массивами:
49
+ *
50
+ * ```js
51
+ * try {
52
+ * const result = array_fill_keys('not an array', [0, 1, 2], 'd');
53
+ * } catch (e) {
54
+ * console.error(e.message); // Параметр "arr" должен быть массивом.
55
+ * }
56
+ * ```
57
+ *
58
+ * 5. Обработка значений, не являющихся списками:
59
+ *
60
+ * ```js
61
+ * try {
62
+ * const result = array_fill_keys([], 'not a list', 'e');
63
+ * } catch (e) {
64
+ * console.error(e.message); // Параметр "keys" должен быть списком.
65
+ * }
66
+ * ```
67
+ *
68
+ * @param {object} arr Исходный массив.
69
+ * @param {array} keys Массив ключей, по которым будет происходить заполнение.
70
+ * @param {any} value Значение, которым будет заполнен массив.
71
+ * @returns {object} Возвращает массив, содержащий элементы, заполненные указанным значением по указанным ключам.
72
+ * @throws {TypeError} Если параметры не являются массивами или списками.
73
+ */
74
+ export default function array_fill_keys(arr, keys, value) {
75
+ if (!is_array(arr)) {
76
+ throw new TypeError('Параметр "arr" должен быть массивом.');
77
+ }
78
+
79
+ if (!is_list(keys)) {
80
+ throw new TypeError('Параметр "keys" должен быть списком.');
81
+ }
82
+
83
+ const result = is_list(arr) ? Array.from(arr) : array(arr);
84
+
85
+ for (const key of keys) {
86
+ result[key] = value;
87
+ }
88
+
89
+ return result;
90
+ }