@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.
- package/CHANGELOG.md +142 -1
- package/docs/helpers/array/array_chunk.md +80 -0
- package/docs/helpers/array/array_chunk_with_keys.md +81 -0
- package/docs/helpers/array/array_column.md +110 -0
- package/docs/helpers/array/array_combine.md +77 -0
- package/docs/helpers/array/array_count_values.md +71 -0
- package/docs/helpers/array/array_diff.md +97 -0
- package/docs/helpers/array/array_diff_assoc.md +81 -0
- package/docs/helpers/array/array_diff_key.md +81 -0
- package/docs/helpers/array/array_diff_uassoc.md +101 -0
- package/docs/helpers/array/array_diff_ukey.md +101 -0
- package/docs/helpers/array/array_fill.md +81 -0
- package/docs/helpers/array/array_fill_keys.md +73 -0
- package/docs/helpers/array/array_filter.md +79 -0
- package/docs/helpers/array/array_flip.md +70 -0
- package/docs/helpers/array/array_index_max.md +78 -0
- package/docs/helpers/array/array_index_min.md +78 -0
- package/docs/helpers/array/array_intersect.md +91 -0
- package/docs/helpers/array/array_intersect_assoc.md +91 -0
- package/docs/helpers/array/array_intersect_key.md +91 -0
- package/docs/helpers/array/array_intersect_uassoc.md +101 -0
- package/docs/helpers/array/array_intersect_ukey.md +101 -0
- package/docs/helpers/array/array_key_exists.md +73 -0
- package/docs/helpers/array/array_key_first.md +62 -0
- package/docs/helpers/array/array_key_last.md +62 -0
- package/docs/helpers/array/array_key_to_lower_case.md +57 -0
- package/docs/helpers/array/array_key_to_upper_case.md +57 -0
- package/docs/helpers/array/array_keys.md +62 -0
- package/docs/helpers/array/array_map.md +69 -0
- package/docs/helpers/array/array_merge.md +67 -0
- package/docs/helpers/array/array_merge_recursive.md +86 -0
- package/docs/helpers/array/array_pad.md +83 -0
- package/docs/helpers/array/array_pop.md +64 -0
- package/docs/helpers/array/array_product.md +62 -0
- package/docs/helpers/array/array_push.md +57 -0
- package/docs/helpers/array/array_rand.md +99 -0
- package/docs/helpers/array/array_reduce.md +77 -0
- package/docs/helpers/array/array_replace.md +85 -0
- package/docs/helpers/array/array_replace_recursive.md +87 -0
- package/docs/helpers/array/array_reverse.md +55 -0
- package/docs/helpers/array/array_search.md +74 -0
- package/docs/helpers/array/array_shift.md +64 -0
- package/docs/helpers/array/array_slice.md +65 -0
- package/docs/helpers/array/array_splice.md +103 -0
- package/docs/helpers/array/array_sum.md +55 -0
- package/docs/helpers/array/array_udiff.md +97 -0
- package/docs/helpers/array/array_udiff_assoc.md +101 -0
- package/docs/helpers/array/array_udiff_uassoc.md +88 -0
- package/docs/helpers/array/array_uintersect.md +101 -0
- package/docs/helpers/array/array_uintersect_assoc.md +102 -0
- package/docs/helpers/array/array_uintersect_uassoc.md +135 -0
- package/docs/helpers/array/array_unique.md +54 -0
- package/docs/helpers/array/array_unshift.md +58 -0
- package/docs/helpers/array/array_values.md +54 -0
- package/docs/helpers/array/array_walk.md +87 -0
- package/docs/helpers/array/array_walk_recursive.md +93 -0
- package/docs/helpers/array/count.md +54 -0
- package/docs/helpers/array/in_array.md +65 -0
- package/docs/helpers/array/natsort.md +60 -0
- package/docs/helpers/array/range.md +76 -0
- package/docs/helpers/array/shuffle.md +74 -0
- package/docs/helpers/array/sort.md +79 -0
- package/docs/helpers/is_char.md +84 -0
- package/docs/helpers/string/is_digit_char.md +70 -0
- package/docs/helpers/string/is_whitespace_char.md +70 -0
- package/docs/helpers/string/natcompare.md +69 -0
- package/docs/helpers/string/natcompare_numeric.md +70 -0
- package/docs/helpers.md +125 -1
- package/index.mjs +66 -1
- package/package.json +2 -1
- package/prettier.config.mjs +2 -1
- package/src/helpers/array/array_chunk.mjs +102 -0
- package/src/helpers/array/array_chunk_with_keys.mjs +102 -0
- package/src/helpers/array/array_column.mjs +131 -0
- package/src/helpers/array/array_combine.mjs +26 -0
- package/src/helpers/array/array_count_values.mjs +82 -0
- package/src/helpers/array/array_diff.mjs +77 -0
- package/src/helpers/array/array_diff_assoc.mjs +56 -0
- package/src/helpers/array/array_diff_key.mjs +56 -0
- package/src/helpers/array/array_diff_uassoc.mjs +76 -0
- package/src/helpers/array/array_diff_ukey.mjs +71 -0
- package/src/helpers/array/array_fill.mjs +108 -0
- package/src/helpers/array/array_fill_keys.mjs +90 -0
- package/src/helpers/array/array_filter.mjs +105 -0
- package/src/helpers/array/array_flip.mjs +58 -0
- package/src/helpers/array/array_index_max.mjs +82 -0
- package/src/helpers/array/array_index_min.mjs +82 -0
- package/src/helpers/array/array_intersect.mjs +71 -0
- package/src/helpers/array/array_intersect_assoc.mjs +67 -0
- package/src/helpers/array/array_intersect_key.mjs +67 -0
- package/src/helpers/array/array_intersect_uassoc.mjs +77 -0
- package/src/helpers/array/array_intersect_ukey.mjs +72 -0
- package/src/helpers/array/array_key_exists.mjs +83 -0
- package/src/helpers/array/array_key_first.mjs +73 -0
- package/src/helpers/array/array_key_last.mjs +74 -0
- package/src/helpers/array/array_key_to_lower_case.mjs +71 -0
- package/src/helpers/array/array_key_to_upper_case.mjs +71 -0
- package/src/helpers/array/array_keys.mjs +65 -0
- package/src/helpers/array/array_map.mjs +84 -0
- package/src/helpers/array/array_merge.mjs +95 -0
- package/src/helpers/array/array_merge_recursive.mjs +153 -0
- package/src/helpers/array/array_pad.mjs +105 -0
- package/src/helpers/array/array_pop.mjs +82 -0
- package/src/helpers/array/array_product.mjs +67 -0
- package/src/helpers/array/array_push.mjs +75 -0
- package/src/helpers/array/array_rand.mjs +129 -0
- package/src/helpers/array/array_reduce.mjs +90 -0
- package/src/helpers/array/array_replace.mjs +25 -0
- package/src/helpers/array/array_replace_recursive.mjs +109 -0
- package/src/helpers/array/array_reverse.mjs +62 -0
- package/src/helpers/array/array_search.mjs +104 -0
- package/src/helpers/array/array_shift.mjs +78 -0
- package/src/helpers/array/array_slice.mjs +99 -0
- package/src/helpers/array/array_splice.mjs +218 -0
- package/src/helpers/array/array_sum.mjs +60 -0
- package/src/helpers/array/array_udiff.mjs +91 -0
- package/src/helpers/array/array_udiff_assoc.mjs +71 -0
- package/src/helpers/array/array_udiff_uassoc.mjs +124 -0
- package/src/helpers/array/array_uintersect.mjs +72 -0
- package/src/helpers/array/array_uintersect_assoc.mjs +77 -0
- package/src/helpers/array/array_uintersect_uassoc.mjs +121 -0
- package/src/helpers/array/array_unique.mjs +77 -0
- package/src/helpers/array/array_unshift.mjs +64 -0
- package/src/helpers/array/array_values.mjs +57 -0
- package/src/helpers/array/array_walk.mjs +95 -0
- package/src/helpers/array/array_walk_recursive.mjs +104 -0
- package/src/helpers/array/count.mjs +57 -0
- package/src/helpers/array/in_array.mjs +67 -0
- package/src/helpers/array/natsort.mjs +62 -0
- package/src/helpers/array/range.mjs +121 -0
- package/src/helpers/array/shuffle.mjs +73 -0
- package/src/helpers/array/sort.mjs +69 -0
- package/src/helpers/is_char.mjs +54 -0
- package/src/helpers/string/is_digit_char.mjs +60 -0
- package/src/helpers/string/is_whitespace_char.mjs +54 -0
- package/src/helpers/string/natcompare.mjs +107 -0
- package/src/helpers/string/natcompare_numeric.mjs +131 -0
- package/tests/helpers/array/array_chunk.test.mjs +49 -0
- package/tests/helpers/array/array_chunk_with_keys.test.mjs +45 -0
- package/tests/helpers/array/array_column.test.mjs +87 -0
- package/tests/helpers/array/array_combine.test.mjs +41 -0
- package/tests/helpers/array/array_count_values.test.mjs +40 -0
- package/tests/helpers/array/array_diff.test.mjs +78 -0
- package/tests/helpers/array/array_diff_assoc.test.mjs +64 -0
- package/tests/helpers/array/array_diff_key.test.mjs +64 -0
- package/tests/helpers/array/array_diff_uassoc.test.mjs +73 -0
- package/tests/helpers/array/array_diff_ukey.test.mjs +77 -0
- package/tests/helpers/array/array_fill.test.mjs +47 -0
- package/tests/helpers/array/array_fill_keys.test.mjs +35 -0
- package/tests/helpers/array/array_filter.test.mjs +38 -0
- package/tests/helpers/array/array_flip.test.mjs +33 -0
- package/tests/helpers/array/array_index_max.test.mjs +41 -0
- package/tests/helpers/array/array_index_min.test.mjs +41 -0
- package/tests/helpers/array/array_intersect.test.mjs +65 -0
- package/tests/helpers/array/array_intersect_assoc.test.mjs +65 -0
- package/tests/helpers/array/array_intersect_key.test.mjs +65 -0
- package/tests/helpers/array/array_intersect_uassoc.test.mjs +76 -0
- package/tests/helpers/array/array_intersect_ukey.test.mjs +74 -0
- package/tests/helpers/array/array_key_exists.test.mjs +36 -0
- package/tests/helpers/array/array_key_first.test.mjs +29 -0
- package/tests/helpers/array/array_key_last.test.mjs +29 -0
- package/tests/helpers/array/array_key_to_lower_case.test.mjs +23 -0
- package/tests/helpers/array/array_key_to_upper_case.test.mjs +23 -0
- package/tests/helpers/array/array_keys.test.mjs +27 -0
- package/tests/helpers/array/array_map.test.mjs +32 -0
- package/tests/helpers/array/array_merge.test.mjs +37 -0
- package/tests/helpers/array/array_merge_recursive.test.mjs +65 -0
- package/tests/helpers/array/array_pad.test.mjs +48 -0
- package/tests/helpers/array/array_pop.test.mjs +29 -0
- package/tests/helpers/array/array_product.test.mjs +33 -0
- package/tests/helpers/array/array_push.test.mjs +31 -0
- package/tests/helpers/array/array_rand.test.mjs +59 -0
- package/tests/helpers/array/array_reduce.test.mjs +44 -0
- package/tests/helpers/array/array_replace.test.mjs +46 -0
- package/tests/helpers/array/array_replace_recursive.test.mjs +46 -0
- package/tests/helpers/array/array_reverse.test.mjs +31 -0
- package/tests/helpers/array/array_search.test.mjs +48 -0
- package/tests/helpers/array/array_shift.test.mjs +29 -0
- package/tests/helpers/array/array_slice.test.mjs +49 -0
- package/tests/helpers/array/array_splice.test.mjs +67 -0
- package/tests/helpers/array/array_sum.test.mjs +27 -0
- package/tests/helpers/array/array_udiff.test.mjs +95 -0
- package/tests/helpers/array/array_udiff_assoc.test.mjs +77 -0
- package/tests/helpers/array/array_udiff_uassoc.test.mjs +89 -0
- package/tests/helpers/array/array_uintersect.test.mjs +78 -0
- package/tests/helpers/array/array_uintersect_assoc.test.mjs +80 -0
- package/tests/helpers/array/array_uintersect_uassoc.test.mjs +122 -0
- package/tests/helpers/array/array_unique.test.mjs +27 -0
- package/tests/helpers/array/array_unshift.test.mjs +31 -0
- package/tests/helpers/array/array_values.test.mjs +27 -0
- package/tests/helpers/array/array_walk.test.mjs +48 -0
- package/tests/helpers/array/array_walk_recursive.test.mjs +53 -0
- package/tests/helpers/array/count.test.mjs +27 -0
- package/tests/helpers/array/in_array.test.mjs +52 -0
- package/tests/helpers/array/natsort.test.mjs +71 -0
- package/tests/helpers/array/range.test.mjs +51 -0
- package/tests/helpers/array/shuffle.test.mjs +42 -0
- package/tests/helpers/array/sort.test.mjs +60 -0
- package/tests/helpers/is_char.test.mjs +40 -0
- package/tests/helpers/string/is_digit_char.test.mjs +32 -0
- package/tests/helpers/string/is_whitespace_char.test.mjs +32 -0
- package/tests/helpers/string/natcompare.test.mjs +100 -0
- package/tests/helpers/string/natcompare_numeric.test.mjs +110 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import array from '../array.mjs';
|
|
2
|
+
import empty from '../empty.mjs';
|
|
3
|
+
import is_array from '../is_array.mjs';
|
|
4
|
+
import is_int from '../is_int.mjs';
|
|
5
|
+
import is_list from '../is_list.mjs';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Объединяет несколько массивов в один.
|
|
9
|
+
*
|
|
10
|
+
* ### Описание
|
|
11
|
+
*
|
|
12
|
+
* Функция `array_merge` используется для объединения нескольких массивов в один.
|
|
13
|
+
* Она поддерживает как обычные массивы, так и ассоциативные массивы (объекты с ключами и значениями).
|
|
14
|
+
*
|
|
15
|
+
* ### Параметры
|
|
16
|
+
*
|
|
17
|
+
* - `...arrays` (object): Массивы, которые необходимо объединить.
|
|
18
|
+
*
|
|
19
|
+
* ### Возвращаемое значение
|
|
20
|
+
*
|
|
21
|
+
* Возвращает новый массив, содержащий элементы всех переданных массивов.
|
|
22
|
+
* Если все переданные массивы являются обычными массивами, результатом будет обычный массив.
|
|
23
|
+
* Если хотя бы один из переданных массивов является ассоциативным массивом, результатом будет ассоциативный массив.
|
|
24
|
+
*
|
|
25
|
+
* ### Примеры использования
|
|
26
|
+
*
|
|
27
|
+
* 1. Объединение обычных массивов:
|
|
28
|
+
*
|
|
29
|
+
* ```js
|
|
30
|
+
* const array1 = [1, 2, 3];
|
|
31
|
+
* const array2 = [4, 5, 6];
|
|
32
|
+
* const result = array_merge(array1, array2);
|
|
33
|
+
* console.log(result); // [1, 2, 3, 4, 5, 6]
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* 2. Объединение ассоциативных массивов:
|
|
37
|
+
*
|
|
38
|
+
* ```js
|
|
39
|
+
* const array1 = { a: 1, b: 2 };
|
|
40
|
+
* const array2 = { c: 3, d: 4 };
|
|
41
|
+
* const result = array_merge(array1, array2);
|
|
42
|
+
* console.log(result); // { a: 1, b: 2, c: 3, d: 4 }
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* 3. Объединение обычных и ассоциативных массивов:
|
|
46
|
+
*
|
|
47
|
+
* ```js
|
|
48
|
+
* const array1 = [1, 2, 3];
|
|
49
|
+
* const array2 = { a: 4, b: 5 };
|
|
50
|
+
* const result = array_merge(array1, array2);
|
|
51
|
+
* console.log(result); // { 0: 1, 1: 2, 2: 3, a: 4, b: 5 }
|
|
52
|
+
* ```
|
|
53
|
+
*
|
|
54
|
+
* 4. Обработка значений, не являющихся массивами:
|
|
55
|
+
*
|
|
56
|
+
* ```js
|
|
57
|
+
* try {
|
|
58
|
+
* const result = array_merge('not an array');
|
|
59
|
+
* } catch (e) {
|
|
60
|
+
* console.error(e.message); // Параметр "arrays" должен быть массивом.
|
|
61
|
+
* }
|
|
62
|
+
* ```
|
|
63
|
+
*
|
|
64
|
+
* @param {...object} arrays Массивы, которые необходимо объединить.
|
|
65
|
+
* @returns {object} Возвращает новый массив, содержащий элементы всех переданных массивов.
|
|
66
|
+
* @throws {TypeError} Если хотя бы один из параметров не является массивом.
|
|
67
|
+
*/
|
|
68
|
+
export default function array_merge(...arrays) {
|
|
69
|
+
if (!arrays.every((arr) => is_array(arr))) {
|
|
70
|
+
throw new TypeError('Параметр "arrays" должен быть массивом.');
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (empty(arrays)) {
|
|
74
|
+
return [];
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
if (arrays.every((arr) => is_list(arr))) {
|
|
78
|
+
return [].concat(...arrays);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const result = array({});
|
|
82
|
+
let index = 0;
|
|
83
|
+
|
|
84
|
+
for (const arr of arrays) {
|
|
85
|
+
for (const [k, v] of Object.entries(arr)) {
|
|
86
|
+
if (is_int(Number(k))) {
|
|
87
|
+
result[index++] = v;
|
|
88
|
+
} else {
|
|
89
|
+
result[k] = v;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
return result;
|
|
95
|
+
}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import array from '../array.mjs';
|
|
2
|
+
import empty from '../empty.mjs';
|
|
3
|
+
import is_array from '../is_array.mjs';
|
|
4
|
+
import is_int from '../is_int.mjs';
|
|
5
|
+
import is_list from '../is_list.mjs';
|
|
6
|
+
import is_null from '../is_null.mjs';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Объединяет несколько массивов рекурсивно.
|
|
10
|
+
*
|
|
11
|
+
* ### Описание
|
|
12
|
+
*
|
|
13
|
+
* Функция `array_merge_recursive` используется для рекурсивного объединения нескольких массивов в один.
|
|
14
|
+
* Она поддерживает как обычные массивы, так и ассоциативные массивы (объекты с ключами и значениями).
|
|
15
|
+
*
|
|
16
|
+
* ### Параметры
|
|
17
|
+
*
|
|
18
|
+
* - `...arrays` (object): Массивы, которые необходимо объединить.
|
|
19
|
+
*
|
|
20
|
+
* ### Возвращаемое значение
|
|
21
|
+
*
|
|
22
|
+
* Возвращает новый массив, содержащий элементы всех переданных массивов.
|
|
23
|
+
* Если все переданные массивы являются обычными массивами, результатом будет обычный массив.
|
|
24
|
+
* Если хотя бы один из переданных массивов является ассоциативным массивом, результатом будет ассоциативный массив.
|
|
25
|
+
*
|
|
26
|
+
* ### Примеры использования
|
|
27
|
+
*
|
|
28
|
+
* 1. Объединение обычных массивов:
|
|
29
|
+
*
|
|
30
|
+
* ```js
|
|
31
|
+
* const array1 = [1, 2, 3];
|
|
32
|
+
* const array2 = [4, 5, 6];
|
|
33
|
+
* const result = array_merge_recursive(array1, array2);
|
|
34
|
+
* console.log(result); // [1, 2, 3, 4, 5, 6]
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* 2. Объединение ассоциативных массивов:
|
|
38
|
+
*
|
|
39
|
+
* ```js
|
|
40
|
+
* const array1 = { a: 1, b: 2 };
|
|
41
|
+
* const array2 = { b: 3, c: 4 };
|
|
42
|
+
* const result = array_merge_recursive(array1, array2);
|
|
43
|
+
* console.log(result); // { a: 1, b: [2, 3], c: 4 }
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
* 3. Объединение обычных и ассоциативных массивов:
|
|
47
|
+
*
|
|
48
|
+
* ```js
|
|
49
|
+
* const array1 = [1, 2, 3];
|
|
50
|
+
* const array2 = { a: 4, b: 5 };
|
|
51
|
+
* const result = array_merge_recursive(array1, array2);
|
|
52
|
+
* console.log(result); // { 0: 1, 1: 2, 2: 3, a: 4, b: 5 }
|
|
53
|
+
* ```
|
|
54
|
+
*
|
|
55
|
+
* 4. Объединение вложенных массивов:
|
|
56
|
+
*
|
|
57
|
+
* ```js
|
|
58
|
+
* const array1 = { a: { b: 1 } };
|
|
59
|
+
* const array2 = { a: { c: 2 } };
|
|
60
|
+
* const result = array_merge_recursive(array1, array2);
|
|
61
|
+
* console.log(result); // { a: { b: 1, c: 2 } }
|
|
62
|
+
* ```
|
|
63
|
+
*
|
|
64
|
+
* 5. Объединение массивов с одинаковыми ключами:
|
|
65
|
+
*
|
|
66
|
+
* ```js
|
|
67
|
+
* const array1 = { a: { b: 1 } };
|
|
68
|
+
* const array2 = { a: { b: 2 } };
|
|
69
|
+
* const result = array_merge_recursive(array1, array2);
|
|
70
|
+
* console.log(result); // { a: { b: [1, 2] } }
|
|
71
|
+
* ```
|
|
72
|
+
*
|
|
73
|
+
* 6. Обработка значений, не являющихся массивами:
|
|
74
|
+
*
|
|
75
|
+
* ```js
|
|
76
|
+
* try {
|
|
77
|
+
* const result = array_merge_recursive('not an array');
|
|
78
|
+
* } catch (e) {
|
|
79
|
+
* console.error(e.message); // Параметр "arrays" должен быть массивом.
|
|
80
|
+
* }
|
|
81
|
+
* ```
|
|
82
|
+
*
|
|
83
|
+
* @param {...object} arrays Массивы, которые необходимо объединить.
|
|
84
|
+
* @returns {object} Возвращает новый массив, содержащий элементы всех переданных массивов.
|
|
85
|
+
* @throws {TypeError} Если хотя бы один из параметров не является массивом.
|
|
86
|
+
*/
|
|
87
|
+
export default function array_merge_recursive(...arrays) {
|
|
88
|
+
if (!arrays.every((arr) => is_array(arr))) {
|
|
89
|
+
throw new TypeError('Параметр "arrays" должен быть массивом.');
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if (empty(arrays)) {
|
|
93
|
+
return [];
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const result = arrays.every((arr) => is_list(arr)) ? [] : array({});
|
|
97
|
+
|
|
98
|
+
// Текущий индекс в массиве
|
|
99
|
+
let index = 0;
|
|
100
|
+
|
|
101
|
+
// Индекс первого массива с числовым ключом, записанный в результат.
|
|
102
|
+
let first_array_index = null;
|
|
103
|
+
|
|
104
|
+
// Перебираем переданные массивы.
|
|
105
|
+
for (const arr of arrays) {
|
|
106
|
+
for (const [k, v] of Object.entries(arr)) {
|
|
107
|
+
// Значение не является массивом, записываем его в результат и продолжаем итерацию.
|
|
108
|
+
//
|
|
109
|
+
// Если значение имеет числовой ключ, переиндексируем его.
|
|
110
|
+
if (!is_array(v)) {
|
|
111
|
+
if (is_int(Number(k))) {
|
|
112
|
+
result[index++] = v;
|
|
113
|
+
} else if (k in result) {
|
|
114
|
+
result[k] = [result[k], v];
|
|
115
|
+
} else {
|
|
116
|
+
result[k] = v;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// Значение является массивом
|
|
123
|
+
//
|
|
124
|
+
// Массив имеет числовой ключ
|
|
125
|
+
if (is_int(Number(k))) {
|
|
126
|
+
// Если это первый массив с числовым ключом, сохраняем его индекс,
|
|
127
|
+
// иначе объединяем массив с первым массивом.
|
|
128
|
+
if (is_null(first_array_index)) {
|
|
129
|
+
result[index] = v;
|
|
130
|
+
first_array_index = index++;
|
|
131
|
+
} else {
|
|
132
|
+
result[first_array_index] = array_merge_recursive(result[first_array_index], v);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// Массив имеет строковый ключ.
|
|
139
|
+
//
|
|
140
|
+
// Если массив с таким ключом уже был записан в результат, объединяем его с текущим массивом.
|
|
141
|
+
// Иначе записываем текущий массив в результат.
|
|
142
|
+
if (k in result && is_array(result[k])) {
|
|
143
|
+
result[k] = array_merge_recursive(result[k], v);
|
|
144
|
+
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
result[k] = v;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return result;
|
|
153
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
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
|
+
import array_fill from './array_fill.mjs';
|
|
6
|
+
import array_merge from './array_merge.mjs';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Дополняет массив до заданной длины указанным значением.
|
|
10
|
+
*
|
|
11
|
+
* ### Описание
|
|
12
|
+
*
|
|
13
|
+
* Функция `array_pad` используется для дополнения массива до заданной длины указанным значением.
|
|
14
|
+
* Если длина положительная, элементы добавляются в конец массива.
|
|
15
|
+
* Если длина отрицательная, элементы добавляются в начало массива.
|
|
16
|
+
*
|
|
17
|
+
* ### Параметры
|
|
18
|
+
*
|
|
19
|
+
* - `arr` (object): Исходный массив.
|
|
20
|
+
* - `length` (number): Желаемая длина массива.
|
|
21
|
+
* - `value` (any): Значение для дополнения массива.
|
|
22
|
+
*
|
|
23
|
+
* ### Возвращаемое значение
|
|
24
|
+
*
|
|
25
|
+
* Возвращает новый массив, дополненный до заданной длины указанным значением.
|
|
26
|
+
*
|
|
27
|
+
* ### Примеры использования
|
|
28
|
+
*
|
|
29
|
+
* 1. Дополнение массива до длины 5:
|
|
30
|
+
*
|
|
31
|
+
* ```js
|
|
32
|
+
* const array = [1, 2, 3];
|
|
33
|
+
* const result = array_pad(array, 5, 0);
|
|
34
|
+
* console.log(result); // [1, 2, 3, 0, 0]
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* 2. Дополнение массива до длины -5:
|
|
38
|
+
*
|
|
39
|
+
* ```js
|
|
40
|
+
* const array = [1, 2, 3];
|
|
41
|
+
* const result = array_pad(array, -5, 0);
|
|
42
|
+
* console.log(result); // [0, 0, 1, 2, 3]
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* 3. Возвращение массива без изменений, если длина меньше или равна текущей длине массива:
|
|
46
|
+
*
|
|
47
|
+
* ```js
|
|
48
|
+
* const array = [1, 2, 3];
|
|
49
|
+
* const result = array_pad(array, 3, 0);
|
|
50
|
+
* console.log(result); // [1, 2, 3]
|
|
51
|
+
* ```
|
|
52
|
+
*
|
|
53
|
+
* 4. Дополнение пустого массива:
|
|
54
|
+
*
|
|
55
|
+
* ```js
|
|
56
|
+
* const array = [];
|
|
57
|
+
* const result = array_pad(array, 3, 0);
|
|
58
|
+
* console.log(result); // [0, 0, 0]
|
|
59
|
+
* ```
|
|
60
|
+
*
|
|
61
|
+
* 5. Обработка значений, не являющихся массивами:
|
|
62
|
+
*
|
|
63
|
+
* ```js
|
|
64
|
+
* try {
|
|
65
|
+
* const result = array_pad('not an array', 5, 0);
|
|
66
|
+
* } catch (e) {
|
|
67
|
+
* console.error(e.message); // Параметр "arr" должен быть массивом.
|
|
68
|
+
* }
|
|
69
|
+
* ```
|
|
70
|
+
*
|
|
71
|
+
* 6. Обработка значений длины, не являющихся числами:
|
|
72
|
+
*
|
|
73
|
+
* ```js
|
|
74
|
+
* try {
|
|
75
|
+
* const result = array_pad([1, 2, 3], 'not a number', 0);
|
|
76
|
+
* } catch (e) {
|
|
77
|
+
* console.error(e.message); // Параметр "length" должен быть целым числом.
|
|
78
|
+
* }
|
|
79
|
+
* ```
|
|
80
|
+
*
|
|
81
|
+
* @param {object} arr Исходный массив.
|
|
82
|
+
* @param {number} length Желаемая длина массива.
|
|
83
|
+
* @param {any} value Значение для дополнения массива.
|
|
84
|
+
* @returns {object} Возвращает новый массив, дополненный до заданной длины указанным значением.
|
|
85
|
+
* @throws {TypeError} Если параметры не являются массивом или числом.
|
|
86
|
+
*/
|
|
87
|
+
export default function array_pad(arr, length, value) {
|
|
88
|
+
if (!is_array(arr)) {
|
|
89
|
+
throw new TypeError('Параметр "arr" должен быть массивом.');
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if (!is_int(length)) {
|
|
93
|
+
throw new TypeError('Параметр "length" должен быть целым числом.');
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const count = Object.keys(arr).length;
|
|
97
|
+
|
|
98
|
+
if (count >= Math.abs(length)) {
|
|
99
|
+
return arr;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const pad = array_fill(is_list(arr) ? [] : array({}), 0, Math.abs(length) - count, value);
|
|
103
|
+
|
|
104
|
+
return length > 0 ? array_merge(arr, pad) : array_merge(pad, arr);
|
|
105
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import empty from '../empty.mjs';
|
|
2
|
+
import is_array from '../is_array.mjs';
|
|
3
|
+
import is_list from '../is_list.mjs';
|
|
4
|
+
import array_key_last from './array_key_last.mjs';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Удаляет и возвращает последний элемент массива.
|
|
8
|
+
*
|
|
9
|
+
* ### Описание
|
|
10
|
+
*
|
|
11
|
+
* Функция `array_pop` используется для удаления и возврата последнего элемента массива.
|
|
12
|
+
* Она поддерживает как обычные массивы, так и ассоциативные массивы (объекты с ключами и значениями).
|
|
13
|
+
*
|
|
14
|
+
* ### Параметры
|
|
15
|
+
*
|
|
16
|
+
* - `arr` (object): Исходный массив.
|
|
17
|
+
*
|
|
18
|
+
* ### Возвращаемое значение
|
|
19
|
+
*
|
|
20
|
+
* Возвращает последний элемент массива. Если массив пустой, возвращает `null`.
|
|
21
|
+
*
|
|
22
|
+
* ### Примеры использования
|
|
23
|
+
*
|
|
24
|
+
* 1. Удаление и возврат последнего элемента обычного массива:
|
|
25
|
+
*
|
|
26
|
+
* ```js
|
|
27
|
+
* const array = [1, 2, 3];
|
|
28
|
+
* const result = array_pop(array);
|
|
29
|
+
* console.log(result); // 3
|
|
30
|
+
* console.log(array); // [1, 2]
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
33
|
+
* 2. Удаление и возврат последнего элемента ассоциативного массива:
|
|
34
|
+
*
|
|
35
|
+
* ```js
|
|
36
|
+
* const array = { a: 1, b: 2, c: 3 };
|
|
37
|
+
* const result = array_pop(array);
|
|
38
|
+
* console.log(result); // 3
|
|
39
|
+
* console.log(array); // { a: 1, b: 2 }
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* 3. Обработка пустого массива:
|
|
43
|
+
*
|
|
44
|
+
* ```js
|
|
45
|
+
* const array = [];
|
|
46
|
+
* const result = array_pop(array);
|
|
47
|
+
* console.log(result); // null
|
|
48
|
+
* ```
|
|
49
|
+
*
|
|
50
|
+
* 4. Обработка значений, не являющихся массивами:
|
|
51
|
+
*
|
|
52
|
+
* ```js
|
|
53
|
+
* try {
|
|
54
|
+
* const result = array_pop('not an array');
|
|
55
|
+
* } catch (e) {
|
|
56
|
+
* console.error(e.message); // Параметр "arr" должен быть массивом.
|
|
57
|
+
* }
|
|
58
|
+
* ```
|
|
59
|
+
*
|
|
60
|
+
* @param {object} arr Исходный массив.
|
|
61
|
+
* @returns {any} Возвращает последний элемент массива. Если массив пустой, возвращает `null`.
|
|
62
|
+
* @throws {TypeError} Если параметр не является массивом.
|
|
63
|
+
*/
|
|
64
|
+
export default function array_pop(arr) {
|
|
65
|
+
if (!is_array(arr)) {
|
|
66
|
+
throw new TypeError('Параметр "arr" должен быть массивом.');
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
if (empty(arr)) {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (is_list(arr)) {
|
|
74
|
+
return arr.pop();
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const last_key = array_key_last(arr);
|
|
78
|
+
const result = arr[last_key];
|
|
79
|
+
delete arr[last_key];
|
|
80
|
+
|
|
81
|
+
return result;
|
|
82
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import is_array from '../is_array.mjs';
|
|
2
|
+
import to_float from '../to_float.mjs';
|
|
3
|
+
import array_reduce from './array_reduce.mjs';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Вычисляет произведение значений массива.
|
|
7
|
+
*
|
|
8
|
+
* ### Описание
|
|
9
|
+
*
|
|
10
|
+
* Функция `array_product` используется для вычисления произведения всех значений в массиве.
|
|
11
|
+
* Она поддерживает как обычные массивы, так и ассоциативные массивы (объекты с ключами и значениями).
|
|
12
|
+
*
|
|
13
|
+
* ### Параметры
|
|
14
|
+
*
|
|
15
|
+
* - `arr` (object): Исходный массив.
|
|
16
|
+
*
|
|
17
|
+
* ### Возвращаемое значение
|
|
18
|
+
*
|
|
19
|
+
* Возвращает произведение всех значений в массиве. Если массив пустой, возвращает `1`.
|
|
20
|
+
*
|
|
21
|
+
* ### Примеры использования
|
|
22
|
+
*
|
|
23
|
+
* 1. Вычисление произведения значений обычного массива:
|
|
24
|
+
*
|
|
25
|
+
* ```js
|
|
26
|
+
* const array = [1, 2, 3, 4];
|
|
27
|
+
* const result = array_product(array);
|
|
28
|
+
* console.log(result); // 24
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* 2. Вычисление произведения значений ассоциативного массива:
|
|
32
|
+
*
|
|
33
|
+
* ```js
|
|
34
|
+
* const array = { a: 1, b: 2, c: 3 };
|
|
35
|
+
* const result = array_product(array);
|
|
36
|
+
* console.log(result); // 6
|
|
37
|
+
* ```
|
|
38
|
+
*
|
|
39
|
+
* 3. Обработка пустого массива:
|
|
40
|
+
*
|
|
41
|
+
* ```js
|
|
42
|
+
* const array = [];
|
|
43
|
+
* const result = array_product(array);
|
|
44
|
+
* console.log(result); // 1
|
|
45
|
+
* ```
|
|
46
|
+
*
|
|
47
|
+
* 4. Обработка значений, не являющихся массивами:
|
|
48
|
+
*
|
|
49
|
+
* ```js
|
|
50
|
+
* try {
|
|
51
|
+
* const result = array_product('not an array');
|
|
52
|
+
* } catch (e) {
|
|
53
|
+
* console.error(e.message); // Параметр "arr" должен быть массивом.
|
|
54
|
+
* }
|
|
55
|
+
* ```
|
|
56
|
+
*
|
|
57
|
+
* @param {object} arr Исходный массив.
|
|
58
|
+
* @returns {number} Возвращает произведение всех значений в массиве. Если массив пустой, возвращает `1`.
|
|
59
|
+
* @throws {TypeError} Если параметр не является массивом.
|
|
60
|
+
*/
|
|
61
|
+
export default function array_product(arr) {
|
|
62
|
+
if (!is_array(arr)) {
|
|
63
|
+
throw new TypeError('Параметр "arr" должен быть массивом.');
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return array_reduce(arr, (carry, item) => (carry *= isNaN(item) ? 1 : to_float(item)), 1);
|
|
67
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import is_array from '../is_array.mjs';
|
|
2
|
+
import is_list from '../is_list.mjs';
|
|
3
|
+
import is_null from '../is_null.mjs';
|
|
4
|
+
import array_index_max from './array_index_max.mjs';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Добавляет один или несколько элементов в конец массива.
|
|
8
|
+
*
|
|
9
|
+
* ### Описание
|
|
10
|
+
*
|
|
11
|
+
* Функция `array_push` используется для добавления одного или нескольких элементов в конец массива.
|
|
12
|
+
* Она поддерживает как обычные массивы, так и ассоциативные массивы (объекты с ключами и значениями).
|
|
13
|
+
*
|
|
14
|
+
* ### Параметры
|
|
15
|
+
*
|
|
16
|
+
* - `arr` (object): Исходный массив.
|
|
17
|
+
* - `...values` (any): Значения, которые необходимо добавить в массив.
|
|
18
|
+
*
|
|
19
|
+
* ### Возвращаемое значение
|
|
20
|
+
*
|
|
21
|
+
* Возвращает новую длину массива после добавления элементов.
|
|
22
|
+
*
|
|
23
|
+
* ### Примеры использования
|
|
24
|
+
*
|
|
25
|
+
* 1. Добавление элементов в обычный массив:
|
|
26
|
+
*
|
|
27
|
+
* ```js
|
|
28
|
+
* const array = [1, 2, 3];
|
|
29
|
+
* const result = array_push(array, 4, 5);
|
|
30
|
+
* console.log(result); // 5
|
|
31
|
+
* console.log(array); // [1, 2, 3, 4, 5]
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* 2. Добавление элементов в ассоциативный массив:
|
|
35
|
+
*
|
|
36
|
+
* ```js
|
|
37
|
+
* const array = { a: 1, b: 2 };
|
|
38
|
+
* const result = array_push(array, 3, 4);
|
|
39
|
+
* console.log(result); // 4
|
|
40
|
+
* console.log(array); // { a: 1, b: 2, 0: 3, 1: 4 }
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* 3. Обработка значений, не являющихся массивами:
|
|
44
|
+
*
|
|
45
|
+
* ```js
|
|
46
|
+
* try {
|
|
47
|
+
* const result = array_push('not an array', 1, 2);
|
|
48
|
+
* } catch (e) {
|
|
49
|
+
* console.error(e.message); // Параметр "arr" должен быть массивом.
|
|
50
|
+
* }
|
|
51
|
+
* ```
|
|
52
|
+
*
|
|
53
|
+
* @param {object} arr Исходный массив.
|
|
54
|
+
* @param {...any} values Значения, которые необходимо добавить в массив.
|
|
55
|
+
* @returns {number} Возвращает новую длину массива после добавления элементов.
|
|
56
|
+
* @throws {TypeError} Если параметр не является массивом.
|
|
57
|
+
*/
|
|
58
|
+
export default function array_push(arr, ...values) {
|
|
59
|
+
if (!is_array(arr)) {
|
|
60
|
+
throw new TypeError('Параметр "arr" должен быть массивом.');
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if (is_list(arr)) {
|
|
64
|
+
return arr.push(...values);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
let index = array_index_max(arr);
|
|
68
|
+
index = is_null(index) ? 0 : index + 1;
|
|
69
|
+
|
|
70
|
+
for (const value of values) {
|
|
71
|
+
arr[index++] = value;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return Object.keys(arr).length;
|
|
75
|
+
}
|