@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,99 @@
|
|
|
1
|
+
import array from '../array.mjs';
|
|
2
|
+
import is_array from '../is_array.mjs';
|
|
3
|
+
import is_list from '../is_list.mjs';
|
|
4
|
+
import is_null from '../is_null.mjs';
|
|
5
|
+
import is_int from '../is_int.mjs';
|
|
6
|
+
import array_combine from './array_combine.mjs';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Возвращает новый массив, содержащий часть исходного массива.
|
|
10
|
+
*
|
|
11
|
+
* ### Описание
|
|
12
|
+
*
|
|
13
|
+
* Функция `array_slice` используется для извлечения части массива, начиная с указанного смещения и до указанной длины.
|
|
14
|
+
* Она поддерживает как обычные массивы, так и ассоциативные массивы (объекты с ключами и значениями).
|
|
15
|
+
*
|
|
16
|
+
* ### Параметры
|
|
17
|
+
*
|
|
18
|
+
* - `arr` (object): Исходный массив.
|
|
19
|
+
* - `offset` (number): Смещение, с которого начинается извлечение.
|
|
20
|
+
* - `length` (number|null): Длина извлекаемой части. Если не указана, извлекается до конца массива.
|
|
21
|
+
*
|
|
22
|
+
* ### Возвращаемое значение
|
|
23
|
+
*
|
|
24
|
+
* Возвращает новый массив, содержащий часть исходного массива.
|
|
25
|
+
*
|
|
26
|
+
* ### Примеры использования
|
|
27
|
+
*
|
|
28
|
+
* 1. Извлечение части обычного массива:
|
|
29
|
+
*
|
|
30
|
+
* ```js
|
|
31
|
+
* const array = [1, 2, 3, 4, 5];
|
|
32
|
+
* const result = array_slice(array, 1, 3);
|
|
33
|
+
* console.log(result); // [2, 3, 4]
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* 2. Извлечение части ассоциативного массива:
|
|
37
|
+
*
|
|
38
|
+
* ```js
|
|
39
|
+
* const array = { a: 1, b: 2, c: 3, d: 4, e: 5 };
|
|
40
|
+
* const result = array_slice(array, 1, 3);
|
|
41
|
+
* console.log(result); // { b: 2, c: 3, d: 4 }
|
|
42
|
+
* ```
|
|
43
|
+
*
|
|
44
|
+
* 3. Извлечение до конца массива:
|
|
45
|
+
*
|
|
46
|
+
* ```js
|
|
47
|
+
* const array = [1, 2, 3, 4, 5];
|
|
48
|
+
* const result = array_slice(array, 2);
|
|
49
|
+
* console.log(result); // [3, 4, 5]
|
|
50
|
+
* ```
|
|
51
|
+
*
|
|
52
|
+
* 4. Обработка значений, не являющихся массивами:
|
|
53
|
+
*
|
|
54
|
+
* ```js
|
|
55
|
+
* try {
|
|
56
|
+
* const result = array_slice('not an array', 1, 2);
|
|
57
|
+
* } catch (e) {
|
|
58
|
+
* console.error(e.message); // Параметр "arr" должен быть массивом.
|
|
59
|
+
* }
|
|
60
|
+
* ```
|
|
61
|
+
*
|
|
62
|
+
* @param {object} arr Исходный массив.
|
|
63
|
+
* @param {number} offset Смещение, с которого начинается извлечение.
|
|
64
|
+
* @param {number|null} [length=null] Длина извлекаемой части.
|
|
65
|
+
* @returns {object} Возвращает новый массив, содержащий часть исходного массива.
|
|
66
|
+
* @throws {TypeError} Если параметры не являются массивом, целым числом или null.
|
|
67
|
+
*/
|
|
68
|
+
export default function array_slice(arr, offset, length = null) {
|
|
69
|
+
if (!is_array(arr)) {
|
|
70
|
+
throw new TypeError('Параметр "arr" должен быть массивом.');
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (!is_int(offset)) {
|
|
74
|
+
throw new TypeError('Параметр "offset" должен быть целым числом.');
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
if (!is_int(length) && !is_null(length)) {
|
|
78
|
+
throw new TypeError('Параметр "length" должен быть целым числом.');
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
let end;
|
|
82
|
+
|
|
83
|
+
if (!is_null(length)) {
|
|
84
|
+
if (length === 0) {
|
|
85
|
+
return is_list(arr) ? [] : array({});
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
end = length > 0 ? offset + length : Object.keys(arr).length + length;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (is_list(arr)) {
|
|
92
|
+
return Object.values(arr).slice(offset, end);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return array_combine(
|
|
96
|
+
Object.keys(arr).slice(offset, end),
|
|
97
|
+
Object.values(arr).slice(offset, end),
|
|
98
|
+
);
|
|
99
|
+
}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import array from '../array.mjs';
|
|
2
|
+
import empty from '../empty.mjs';
|
|
3
|
+
import is_array from '../is_array.mjs';
|
|
4
|
+
import is_assoc from '../is_assoc.mjs';
|
|
5
|
+
import is_int from '../is_int.mjs';
|
|
6
|
+
import is_list from '../is_list.mjs';
|
|
7
|
+
import is_null from '../is_null.mjs';
|
|
8
|
+
import array_push from './array_push.mjs';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Удаляет элементы из массива и, при необходимости, добавляет новые элементы на их место.
|
|
12
|
+
*
|
|
13
|
+
* ### Описание
|
|
14
|
+
*
|
|
15
|
+
* Функция `array_splice` используется для удаления элементов из массива и добавления новых элементов на их место.
|
|
16
|
+
* Она поддерживает как обычные массивы, так и ассоциативные массивы (объекты с ключами и значениями).
|
|
17
|
+
*
|
|
18
|
+
* ### Параметры
|
|
19
|
+
*
|
|
20
|
+
* - `arr` (object): Исходный массив.
|
|
21
|
+
* - `offset` (number): Смещение, с которого начинается удаление.
|
|
22
|
+
* - `length` (number|null): Количество удаляемых элементов. Если не указано, удаляются все элементы до конца массива.
|
|
23
|
+
* - `replacements` (object): Элементы для добавления на место удаленных.
|
|
24
|
+
*
|
|
25
|
+
* ### Возвращаемое значение
|
|
26
|
+
*
|
|
27
|
+
* Возвращает массив удаленных элементов.
|
|
28
|
+
*
|
|
29
|
+
* ### Примеры использования
|
|
30
|
+
*
|
|
31
|
+
* 1. Удаление элементов из обычного массива:
|
|
32
|
+
*
|
|
33
|
+
* ```js
|
|
34
|
+
* const array = [1, 2, 3, 4, 5];
|
|
35
|
+
* const result = array_splice(array, 1, 2);
|
|
36
|
+
* console.log(result); // [2, 3]
|
|
37
|
+
* console.log(array); // [1, 4, 5]
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* 2. Удаление элементов из ассоциативного массива:
|
|
41
|
+
*
|
|
42
|
+
* ```js
|
|
43
|
+
* const array = { a: 1, b: 2, c: 3, d: 4, e: 5 };
|
|
44
|
+
* const result = array_splice(array, 1, 2);
|
|
45
|
+
* console.log(result); // { b: 2, c: 3 }
|
|
46
|
+
* console.log(array); // { a: 1, d: 4, e: 5 }
|
|
47
|
+
* ```
|
|
48
|
+
*
|
|
49
|
+
* 3. Добавление элементов в обычный массив:
|
|
50
|
+
*
|
|
51
|
+
* ```js
|
|
52
|
+
* const array = [1, 2, 3];
|
|
53
|
+
* const result = array_splice(array, 1, 0, [4, 5]);
|
|
54
|
+
* console.log(result); // []
|
|
55
|
+
* console.log(array); // [1, 4, 5, 2, 3]
|
|
56
|
+
* ```
|
|
57
|
+
*
|
|
58
|
+
* 4. Добавление элементов в ассоциативный массив:
|
|
59
|
+
*
|
|
60
|
+
* ```js
|
|
61
|
+
* const array = { a: 1, b: 2, c: 3 };
|
|
62
|
+
* const result = array_splice(array, 1, 0, { d: 4, e: 5 });
|
|
63
|
+
* console.log(result); // {}
|
|
64
|
+
* console.log(array); // { a: 1, d: 4, e: 5, b: 2, c: 3 }
|
|
65
|
+
* ```
|
|
66
|
+
*
|
|
67
|
+
* 5. Замена элементов в обычном массиве:
|
|
68
|
+
*
|
|
69
|
+
* ```js
|
|
70
|
+
* const array = [1, 2, 3];
|
|
71
|
+
* const result = array_splice(array, 1, 2, [4, 5]);
|
|
72
|
+
* console.log(result); // [2, 3]
|
|
73
|
+
* console.log(array); // [1, 4, 5]
|
|
74
|
+
* ```
|
|
75
|
+
*
|
|
76
|
+
* 6. Замена элементов в ассоциативном массиве:
|
|
77
|
+
*
|
|
78
|
+
* ```js
|
|
79
|
+
* const array = { a: 1, b: 2, c: 3 };
|
|
80
|
+
* const result = array_splice(array, 1, 2, { d: 4, e: 5 });
|
|
81
|
+
* console.log(result); // { b: 2, c: 3 }
|
|
82
|
+
* console.log(array); // { a: 1, d: 4, e: 5 }
|
|
83
|
+
* ```
|
|
84
|
+
*
|
|
85
|
+
* 7. Обработка значений, не являющихся массивами:
|
|
86
|
+
*
|
|
87
|
+
* ```js
|
|
88
|
+
* try {
|
|
89
|
+
* const result = array_splice('not an array', 1, 2);
|
|
90
|
+
* } catch (e) {
|
|
91
|
+
* console.error(e.message); // Параметр "arr" должен быть массивом.
|
|
92
|
+
* }
|
|
93
|
+
* ```
|
|
94
|
+
*
|
|
95
|
+
* @param {object} arr Исходный массив.
|
|
96
|
+
* @param {number} offset Смещение, с которого начинается удаление.
|
|
97
|
+
* @param {number|null} [length=null] Количество удаляемых элементов.
|
|
98
|
+
* @param {object} [replacements=[]] Элементы для добавления на место удаленных.
|
|
99
|
+
* @returns {object} Возвращает массив удаленных элементов.
|
|
100
|
+
* @throws {TypeError} Если параметры не являются массивом, целым числом или null.
|
|
101
|
+
*/
|
|
102
|
+
export default function array_splice(arr, offset, length = null, ...replacements) {
|
|
103
|
+
if (!is_array(arr)) {
|
|
104
|
+
throw new TypeError('Параметр "arr" должен быть массивом.');
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (!is_int(offset)) {
|
|
108
|
+
throw new TypeError('Параметр "offset" должен быть целым числом.');
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
if (!is_int(length) && !is_null(length)) {
|
|
112
|
+
throw new TypeError('Параметр "length" должен быть целым числом.');
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
if (empty(replacements) && !is_null(length) && length === 0) {
|
|
116
|
+
return is_list(arr) ? [] : array({});
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const count = Object.keys(arr).length;
|
|
120
|
+
|
|
121
|
+
if (offset < 0) {
|
|
122
|
+
offset = count + offset;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// if (is_list(arr)) {
|
|
126
|
+
// if (is_null(length)) {
|
|
127
|
+
// length = count;
|
|
128
|
+
// } else if (length < 0) {
|
|
129
|
+
// length = count + length - offset;
|
|
130
|
+
// }
|
|
131
|
+
|
|
132
|
+
// return arr.splice(offset, length, ...replacements);
|
|
133
|
+
// }
|
|
134
|
+
|
|
135
|
+
let end = count;
|
|
136
|
+
|
|
137
|
+
if (!is_null(length)) {
|
|
138
|
+
if (length > 0) {
|
|
139
|
+
end = offset + length;
|
|
140
|
+
} else if (length < 0) {
|
|
141
|
+
end = count + length;
|
|
142
|
+
} else {
|
|
143
|
+
end = offset;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// Удаленные пары ключ-значение исходного массива.
|
|
148
|
+
const result = {};
|
|
149
|
+
|
|
150
|
+
// Временный массив.
|
|
151
|
+
// Нужен для того, чтобы элементы исходного массива имели ожидаемые позиции.
|
|
152
|
+
const tmp = {};
|
|
153
|
+
|
|
154
|
+
// Текущая позиция в исходном массиве.
|
|
155
|
+
let index = 0;
|
|
156
|
+
|
|
157
|
+
//
|
|
158
|
+
// Исходный массив рассматривается как список пар ключ-значение,
|
|
159
|
+
// где ключами являются не индексы, а позиция пары в массиве.
|
|
160
|
+
//
|
|
161
|
+
// Например, список будет иметь вид:
|
|
162
|
+
//
|
|
163
|
+
// 0 1 2 - это не индексы, а позиция в массиве.
|
|
164
|
+
// [1, 2, 3]
|
|
165
|
+
//
|
|
166
|
+
// или
|
|
167
|
+
//
|
|
168
|
+
// -3 -2 -1 - позиция в массиве c обратной стороны.
|
|
169
|
+
// [1, 2, 3]
|
|
170
|
+
//
|
|
171
|
+
// Ассоциативный массив:
|
|
172
|
+
//
|
|
173
|
+
// 0 1 2 - позиция в массиве.
|
|
174
|
+
// { foo: 'bar', baz: 'bax', ban: 'bam' }
|
|
175
|
+
//
|
|
176
|
+
for (const [k, v] of Object.entries(arr)) {
|
|
177
|
+
// Если текущая позиция совпадает с начальной позицией для удаления
|
|
178
|
+
// и если переданы элементы для вставки, добавляем их в конец временного массива.
|
|
179
|
+
if (index === offset && !empty(replacements)) {
|
|
180
|
+
for (const replacement of replacements) {
|
|
181
|
+
if (is_assoc(replacement)) {
|
|
182
|
+
Object.assign(tmp, replacement);
|
|
183
|
+
} else if (is_list(replacement)) {
|
|
184
|
+
array_push(tmp, ...replacement);
|
|
185
|
+
} else {
|
|
186
|
+
array_push(tmp, replacement);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// Если текущая позиция входит в диапазон элементов для удаления,
|
|
192
|
+
// записывает пару ключ-значение в результирующий массив.
|
|
193
|
+
// Иначе записываем пару ключ-значение во временный массив.
|
|
194
|
+
if (index >= offset && index < end) {
|
|
195
|
+
result[k] = v;
|
|
196
|
+
} else {
|
|
197
|
+
is_int(Number(k)) ? array_push(tmp, v) : (tmp[k] = v);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
index++;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// Очищаем исходный массив.
|
|
204
|
+
for (const k in arr) {
|
|
205
|
+
delete arr[k];
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// Копируем все свойства из временного массива в исходный.
|
|
209
|
+
for (const [k, v] of Object.entries(tmp)) {
|
|
210
|
+
arr[k] = v;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
if (is_list(arr)) {
|
|
214
|
+
return Object.values(result);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
return result;
|
|
218
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
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_sum` используется для вычисления суммы всех значений в массиве.
|
|
11
|
+
* Она поддерживает как обычные массивы, так и ассоциативные массивы (объекты с ключами и значениями).
|
|
12
|
+
* Все значения массива приводятся к числовому типу с плавающей точкой перед суммированием.
|
|
13
|
+
*
|
|
14
|
+
* ### Параметры
|
|
15
|
+
*
|
|
16
|
+
* - `arr` (object): Исходный массив.
|
|
17
|
+
*
|
|
18
|
+
* ### Возвращаемое значение
|
|
19
|
+
*
|
|
20
|
+
* Возвращает сумму всех значений в массиве.
|
|
21
|
+
*
|
|
22
|
+
* ### Примеры использования
|
|
23
|
+
*
|
|
24
|
+
* 1. Вычисление суммы значений в обычном массиве:
|
|
25
|
+
*
|
|
26
|
+
* ```js
|
|
27
|
+
* const array = [1, 2, 3, 4, 5];
|
|
28
|
+
* const result = array_sum(array);
|
|
29
|
+
* console.log(result); // 15
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* 2. Вычисление суммы значений в ассоциативном массиве:
|
|
33
|
+
*
|
|
34
|
+
* ```js
|
|
35
|
+
* const array = { a: 1, b: 2, c: 3 };
|
|
36
|
+
* const result = array_sum(array);
|
|
37
|
+
* console.log(result); // 6
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* 3. Обработка значений, не являющихся массивами:
|
|
41
|
+
*
|
|
42
|
+
* ```js
|
|
43
|
+
* try {
|
|
44
|
+
* const result = array_sum('not an array');
|
|
45
|
+
* } catch (e) {
|
|
46
|
+
* console.error(e.message); // Параметр "arr" должен быть массивом.
|
|
47
|
+
* }
|
|
48
|
+
* ```
|
|
49
|
+
*
|
|
50
|
+
* @param {object} arr Исходный массив.
|
|
51
|
+
* @returns {number} Возвращает сумму всех значений в массиве.
|
|
52
|
+
* @throws {TypeError} Если параметр не является массивом.
|
|
53
|
+
*/
|
|
54
|
+
export default function array_sum(arr) {
|
|
55
|
+
if (!is_array(arr)) {
|
|
56
|
+
throw new TypeError('Параметр "arr" должен быть массивом.');
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return array_reduce(arr, (carry, item) => (carry += to_float(item)), 0);
|
|
60
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import array_udiff_uassoc from './array_udiff_uassoc.mjs';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Вычисляет расхождение между массивами с использованием пользовательской функции сравнения для значений.
|
|
5
|
+
*
|
|
6
|
+
* ### Описание
|
|
7
|
+
*
|
|
8
|
+
* Функция `array_udiff` используется для вычисления расхождения между массивами с использованием пользовательской функции сравнения для значений.
|
|
9
|
+
* Она возвращает ассоциативный массив, содержащий элементы из первого массива, которые отсутствуют в других массивах.
|
|
10
|
+
*
|
|
11
|
+
* ### Параметры
|
|
12
|
+
*
|
|
13
|
+
* - `value_compare_func` (function): Функция для сравнения значений.
|
|
14
|
+
* - `original_array` (object): Исходный массив.
|
|
15
|
+
* - `...arrays` (object): Массивы для сравнения.
|
|
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 = [1, 2, 3];
|
|
28
|
+
* const array1 = [1, 2];
|
|
29
|
+
* const result = array_udiff(value_compare_func, original_array, array1);
|
|
30
|
+
* console.log(result); // { 2: 3 }
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
33
|
+
* 2. Обработка пустых массивов:
|
|
34
|
+
*
|
|
35
|
+
* ```js
|
|
36
|
+
* const value_compare_func = (a, b) => a === b;
|
|
37
|
+
* const original_array = [];
|
|
38
|
+
* const array1 = [];
|
|
39
|
+
* const result = array_udiff(value_compare_func, original_array, array1);
|
|
40
|
+
* console.log(result); // {}
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* 3. Обработка значений, не являющихся массивами:
|
|
44
|
+
*
|
|
45
|
+
* ```js
|
|
46
|
+
* try {
|
|
47
|
+
* const result = array_udiff('not a function', 'not an array');
|
|
48
|
+
* } catch (e) {
|
|
49
|
+
* console.error(e.message); // Параметр "value_compare_func" должен быть функцией.
|
|
50
|
+
* }
|
|
51
|
+
* ```
|
|
52
|
+
*
|
|
53
|
+
* 4. Сравнение массивов с различными типами данных:
|
|
54
|
+
*
|
|
55
|
+
* ```js
|
|
56
|
+
* const value_compare_func = (a, b) => a === b;
|
|
57
|
+
* const original_array = [1, '2', true];
|
|
58
|
+
* const array1 = [1, 2, false];
|
|
59
|
+
* const result = array_udiff(value_compare_func, original_array, array1);
|
|
60
|
+
* console.log(result); // { 1: '2', 2: true }
|
|
61
|
+
* ```
|
|
62
|
+
*
|
|
63
|
+
* 5. Сравнение массивов с объектами:
|
|
64
|
+
*
|
|
65
|
+
* ```js
|
|
66
|
+
* const value_compare_func = (a, b) => JSON.stringify(a) === JSON.stringify(b);
|
|
67
|
+
* const original_array = [{ id: 1 }, { id: 2 }, { id: 3 }];
|
|
68
|
+
* const array1 = [{ id: 1 }, { id: 2 }];
|
|
69
|
+
* const result = array_udiff(value_compare_func, original_array, array1);
|
|
70
|
+
* console.log(result); // { 2: { id: 3 } }
|
|
71
|
+
* ```
|
|
72
|
+
*
|
|
73
|
+
* 6. Сравнение ассоциативных массивов:
|
|
74
|
+
*
|
|
75
|
+
* ```js
|
|
76
|
+
* const value_compare_func = (a, b) => a === b;
|
|
77
|
+
* const original_array = { a: 1, b: 2, c: 3 };
|
|
78
|
+
* const array1 = { a: 1, b: 2 };
|
|
79
|
+
* const result = array_udiff(value_compare_func, original_array, array1);
|
|
80
|
+
* console.log(result); // { c: 3 }
|
|
81
|
+
* ```
|
|
82
|
+
*
|
|
83
|
+
* @param {function} value_compare_func Функция для сравнения значений.
|
|
84
|
+
* @param {object} original_array Исходный массив.
|
|
85
|
+
* @param {...object} arrays Массивы для сравнения.
|
|
86
|
+
* @returns {object} Возвращает ассоциативный массив, содержащий элементы из первого массива, которые отсутствуют в других массивах.
|
|
87
|
+
* @throws {TypeError} Если параметры не являются функциями или массивами.
|
|
88
|
+
*/
|
|
89
|
+
export default function array_udiff(value_compare_func, original_array, ...arrays) {
|
|
90
|
+
return array_udiff_uassoc(value_compare_func, () => true, original_array, ...arrays);
|
|
91
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import array_udiff_uassoc from './array_udiff_uassoc.mjs';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Вычисляет расхождение между массивами с использованием пользовательской функции сравнения для значений и ассоциативного сравнения ключей.
|
|
5
|
+
*
|
|
6
|
+
* ### Описание
|
|
7
|
+
*
|
|
8
|
+
* Функция `array_udiff_assoc` используется для вычисления расхождения между массивами с использованием пользовательской функции сравнения для значений и ассоциативного сравнения ключей.
|
|
9
|
+
* Она возвращает ассоциативный массив, содержащий элементы из первого массива, которые отсутствуют в других массивах.
|
|
10
|
+
*
|
|
11
|
+
* ### Параметры
|
|
12
|
+
*
|
|
13
|
+
* - `value_compare_func` (function): Функция для сравнения значений.
|
|
14
|
+
* - `original_array` (object): Исходный массив.
|
|
15
|
+
* - `...arrays` (object): Массивы для сравнения.
|
|
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 result = array_udiff_assoc(value_compare_func, original_array, array1);
|
|
30
|
+
* console.log(result); // { c: 3 }
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
33
|
+
* 2. Обработка пустых массивов:
|
|
34
|
+
*
|
|
35
|
+
* ```js
|
|
36
|
+
* const value_compare_func = (a, b) => a === b;
|
|
37
|
+
* const original_array = {};
|
|
38
|
+
* const array1 = {};
|
|
39
|
+
* const result = array_udiff_assoc(value_compare_func, original_array, array1);
|
|
40
|
+
* console.log(result); // {}
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* 3. Обработка значений, не являющихся массивами:
|
|
44
|
+
*
|
|
45
|
+
* ```js
|
|
46
|
+
* try {
|
|
47
|
+
* const result = array_udiff_assoc('not a function', 'not an array');
|
|
48
|
+
* } catch (e) {
|
|
49
|
+
* console.error(e.message); // Параметр "value_compare_func" должен быть функцией.
|
|
50
|
+
* }
|
|
51
|
+
* ```
|
|
52
|
+
*
|
|
53
|
+
* 4. Сравнение массивов с различными типами данных:
|
|
54
|
+
*
|
|
55
|
+
* ```js
|
|
56
|
+
* const value_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_udiff_assoc(value_compare_func, original_array, array1);
|
|
60
|
+
* console.log(result); // { b: '2', c: true }
|
|
61
|
+
* ```
|
|
62
|
+
*
|
|
63
|
+
* @param {function} value_compare_func Функция для сравнения значений.
|
|
64
|
+
* @param {object} original_array Исходный массив.
|
|
65
|
+
* @param {...object} arrays Массивы для сравнения.
|
|
66
|
+
* @returns {object} Возвращает ассоциативный массив, содержащий элементы из первого массива, которые отсутствуют в других массивах.
|
|
67
|
+
* @throws {TypeError} Если параметры не являются функциями или массивами.
|
|
68
|
+
*/
|
|
69
|
+
export default function array_udiff_assoc(value_compare_func, original_array, ...arrays) {
|
|
70
|
+
return array_udiff_uassoc(value_compare_func, (a, b) => a === b, original_array, ...arrays);
|
|
71
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import is_array from '../is_array.mjs';
|
|
2
|
+
import is_function from '../is_function.mjs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Вычисляет расхождение между массивами с использованием пользовательских функций сравнения для значений и ключей.
|
|
6
|
+
*
|
|
7
|
+
* ### Описание
|
|
8
|
+
*
|
|
9
|
+
* Функция `array_udiff_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 = { d: 4 };
|
|
33
|
+
* const result = array_udiff_uassoc(value_compare_func, key_compare_func, original_array, array1, array2);
|
|
34
|
+
* console.log(result); // { 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_udiff_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_udiff_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_udiff_uassoc(value_compare_func, key_compare_func, original_array, array1);
|
|
66
|
+
* console.log(result); // { b: '2', c: true }
|
|
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_udiff_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((array) => is_array(array))) {
|
|
95
|
+
throw new TypeError('Параметр "arrays" должен быть массивом.');
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
const result = {};
|
|
99
|
+
|
|
100
|
+
// Перебираем исходный массив
|
|
101
|
+
original: 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
|
+
continue original;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Если совпадений не найдено, записываем пару ключ-значение из исходного массива в расхождение.
|
|
120
|
+
result[original_key] = original_value;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
return result;
|
|
124
|
+
}
|