@rogolev/value 0.0.3 → 0.0.5
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 +319 -1
- package/docs/classes/Expect/toBe.md +61 -0
- package/docs/classes/Expect/toBeArray.md +52 -0
- package/docs/classes/Expect/toBeAssoc.md +53 -0
- package/docs/classes/Expect/toBeBigInt.md +52 -0
- package/docs/classes/Expect/toBeBool.md +53 -0
- package/docs/classes/Expect/toBeBoolean.md +53 -0
- package/docs/classes/Expect/toBeChar.md +53 -0
- package/docs/classes/Expect/toBeClass.md +53 -0
- package/docs/classes/Expect/toBeFloat.md +53 -0
- package/docs/classes/Expect/toBeFunction.md +52 -0
- package/docs/classes/Expect/toBeInfinity.md +53 -0
- package/docs/classes/Expect/toBeInt.md +53 -0
- package/docs/classes/Expect/toBeInteger.md +53 -0
- package/docs/classes/Expect/toBeList.md +53 -0
- package/docs/classes/Expect/toBeNaN.md +53 -0
- package/docs/classes/Expect/toBeNull.md +51 -0
- package/docs/classes/Expect/toBeNumber.md +52 -0
- package/docs/classes/Expect/toBeNumeric.md +53 -0
- package/docs/classes/Expect/toBeObject.md +52 -0
- package/docs/classes/Expect/toBeScalar.md +53 -0
- package/docs/classes/Expect/toBeString.md +52 -0
- package/docs/classes/Expect/toBeSymbol.md +53 -0
- package/docs/classes/Expect/toBeUndefined.md +54 -0
- package/docs/classes/Expect/toEqual.md +69 -0
- package/docs/classes/Expect/toStrictEqual.md +70 -0
- package/docs/classes/Expect.md +87 -0
- package/docs/classes/Type/expectArray.md +63 -0
- package/docs/classes/Type/expectAssoc.md +65 -0
- package/docs/classes/Type/expectBigInt.md +63 -0
- package/docs/classes/Type/expectBool.md +65 -0
- package/docs/classes/Type/expectBoolean.md +65 -0
- package/docs/classes/Type/expectChar.md +63 -0
- package/docs/classes/Type/expectClass.md +63 -0
- package/docs/classes/Type/expectFloat.md +68 -0
- package/docs/classes/Type/expectFunction.md +63 -0
- package/docs/classes/Type/expectInfinity.md +65 -0
- package/docs/classes/Type/expectInt.md +64 -0
- package/docs/classes/Type/expectInteger.md +64 -0
- package/docs/classes/Type/expectList.md +63 -0
- package/docs/classes/Type/expectNaN.md +63 -0
- package/docs/classes/Type/expectNull.md +63 -0
- package/docs/classes/Type/expectNumber.md +63 -0
- package/docs/classes/Type/expectNumeric.md +63 -0
- package/docs/classes/Type/expectObject.md +64 -0
- package/docs/classes/Type/expectScalar.md +63 -0
- package/docs/classes/Type/expectString.md +63 -0
- package/docs/classes/Type/expectSymbol.md +63 -0
- package/docs/classes/Type/expectUndefined.md +63 -0
- package/docs/classes/Type.md +101 -2
- package/docs/classes.md +2 -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/expect.md +58 -0
- package/docs/helpers/expect_array.md +63 -0
- package/docs/helpers/expect_assoc.md +65 -0
- package/docs/helpers/expect_bigint.md +63 -0
- package/docs/helpers/expect_bool.md +65 -0
- package/docs/helpers/expect_boolean.md +65 -0
- package/docs/helpers/expect_char.md +63 -0
- package/docs/helpers/expect_class.md +63 -0
- package/docs/helpers/expect_float.md +65 -0
- package/docs/helpers/expect_function.md +63 -0
- package/docs/helpers/expect_infinity.md +65 -0
- package/docs/helpers/expect_int.md +65 -0
- package/docs/helpers/expect_integer.md +65 -0
- package/docs/helpers/expect_list.md +63 -0
- package/docs/helpers/expect_nan.md +63 -0
- package/docs/helpers/expect_null.md +63 -0
- package/docs/helpers/expect_number.md +63 -0
- package/docs/helpers/expect_numeric.md +63 -0
- package/docs/helpers/expect_object.md +64 -0
- package/docs/helpers/expect_scalar.md +63 -0
- package/docs/helpers/expect_string.md +63 -0
- package/docs/helpers/expect_symbol.md +63 -0
- package/docs/helpers/expect_undefined.md +64 -0
- package/docs/helpers/is_char.md +84 -0
- package/docs/helpers/is_equal.md +75 -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 +172 -1
- package/index.mjs +91 -1
- package/package.json +1 -1
- package/prettier.config.mjs +2 -1
- package/src/classes/Expect.mjs +1445 -0
- package/src/classes/Type.mjs +2739 -1284
- package/src/constants.mjs +83 -14
- 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/expect.mjs +44 -0
- package/src/helpers/expect_array.mjs +66 -0
- package/src/helpers/expect_assoc.mjs +66 -0
- package/src/helpers/expect_bigint.mjs +66 -0
- package/src/helpers/expect_bool.mjs +66 -0
- package/src/helpers/expect_boolean.mjs +57 -0
- package/src/helpers/expect_char.mjs +66 -0
- package/src/helpers/expect_class.mjs +66 -0
- package/src/helpers/expect_float.mjs +66 -0
- package/src/helpers/expect_function.mjs +66 -0
- package/src/helpers/expect_infinity.mjs +66 -0
- package/src/helpers/expect_int.mjs +66 -0
- package/src/helpers/expect_integer.mjs +57 -0
- package/src/helpers/expect_list.mjs +66 -0
- package/src/helpers/expect_nan.mjs +66 -0
- package/src/helpers/expect_null.mjs +66 -0
- package/src/helpers/expect_number.mjs +66 -0
- package/src/helpers/expect_numeric.mjs +66 -0
- package/src/helpers/expect_object.mjs +67 -0
- package/src/helpers/expect_scalar.mjs +66 -0
- package/src/helpers/expect_string.mjs +65 -0
- package/src/helpers/expect_symbol.mjs +66 -0
- package/src/helpers/expect_undefined.mjs +66 -0
- package/src/helpers/is_char.mjs +54 -0
- package/src/helpers/is_equal.mjs +94 -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/classes/Expect/toBe.test.mjs +60 -0
- package/tests/classes/Expect/toBeArray.test.mjs +46 -0
- package/tests/classes/Expect/toBeAssoc.test.mjs +48 -0
- package/tests/classes/Expect/toBeBigInt.test.mjs +46 -0
- package/tests/classes/Expect/toBeBool.test.mjs +48 -0
- package/tests/classes/Expect/toBeBoolean.test.mjs +48 -0
- package/tests/classes/Expect/toBeChar.test.mjs +46 -0
- package/tests/classes/Expect/toBeClass.test.mjs +48 -0
- package/tests/classes/Expect/toBeFloat.test.mjs +48 -0
- package/tests/classes/Expect/toBeFunction.test.mjs +51 -0
- package/tests/classes/Expect/toBeInfinity.test.mjs +48 -0
- package/tests/classes/Expect/toBeInt.test.mjs +48 -0
- package/tests/classes/Expect/toBeInteger.test.mjs +48 -0
- package/tests/classes/Expect/toBeList.test.mjs +46 -0
- package/tests/classes/Expect/toBeNaN.test.mjs +46 -0
- package/tests/classes/Expect/toBeNull.test.mjs +46 -0
- package/tests/classes/Expect/toBeNumber.test.mjs +46 -0
- package/tests/classes/Expect/toBeNumeric.test.mjs +53 -0
- package/tests/classes/Expect/toBeObject.test.mjs +47 -0
- package/tests/classes/Expect/toBeScalar.test.mjs +63 -0
- package/tests/classes/Expect/toBeString.test.mjs +46 -0
- package/tests/classes/Expect/toBeSymbol.test.mjs +46 -0
- package/tests/classes/Expect/toBeUndefined.test.mjs +50 -0
- package/tests/classes/Expect/toEqual.test.mjs +66 -0
- package/tests/classes/Expect/toStrictEqual.test.mjs +73 -0
- package/tests/classes/Type.test.mjs +1320 -1262
- 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/array.test.mjs +58 -58
- package/tests/helpers/expect.test.mjs +95 -0
- package/tests/helpers/expect_array.test.mjs +71 -0
- package/tests/helpers/expect_assoc.test.mjs +61 -0
- package/tests/helpers/expect_bigint.test.mjs +63 -0
- package/tests/helpers/expect_bool.test.mjs +59 -0
- package/tests/helpers/expect_boolean.test.mjs +61 -0
- package/tests/helpers/expect_char.test.mjs +63 -0
- package/tests/helpers/expect_class.test.mjs +64 -0
- package/tests/helpers/expect_float.test.mjs +64 -0
- package/tests/helpers/expect_function.test.mjs +65 -0
- package/tests/helpers/expect_infinity.test.mjs +62 -0
- package/tests/helpers/expect_int.test.mjs +57 -0
- package/tests/helpers/expect_integer.test.mjs +59 -0
- package/tests/helpers/expect_list.test.mjs +73 -0
- package/tests/helpers/expect_nan.test.mjs +57 -0
- package/tests/helpers/expect_null.test.mjs +57 -0
- package/tests/helpers/expect_number.test.mjs +57 -0
- package/tests/helpers/expect_numeric.test.mjs +57 -0
- package/tests/helpers/expect_object.test.mjs +63 -0
- package/tests/helpers/expect_scalar.test.mjs +72 -0
- package/tests/helpers/expect_string.test.mjs +65 -0
- package/tests/helpers/expect_symbol.test.mjs +66 -0
- package/tests/helpers/expect_undefined.test.mjs +59 -0
- package/tests/helpers/is_char.test.mjs +40 -0
- package/tests/helpers/is_equal.test.mjs +110 -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,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
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import empty from '../empty.mjs';
|
|
2
|
+
import is_array from '../is_array.mjs';
|
|
3
|
+
import is_int from '../is_int.mjs';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Возвращает один или несколько случайных ключей из массива.
|
|
7
|
+
*
|
|
8
|
+
* ### Описание
|
|
9
|
+
*
|
|
10
|
+
* Функция `array_rand` используется для получения одного или нескольких случайных ключей из массива.
|
|
11
|
+
* Она поддерживает как обычные массивы, так и ассоциативные массивы (объекты с ключами и значениями).
|
|
12
|
+
*
|
|
13
|
+
* ### Параметры
|
|
14
|
+
*
|
|
15
|
+
* - `arr` (object): Исходный массив.
|
|
16
|
+
* - `count` (number): Количество случайных ключей для возврата. По умолчанию `1`.
|
|
17
|
+
*
|
|
18
|
+
* ### Возвращаемое значение
|
|
19
|
+
*
|
|
20
|
+
* Возвращает один или несколько случайных ключей из массива. Если массив пустой, возвращает `null`.
|
|
21
|
+
*
|
|
22
|
+
* ### Примеры использования
|
|
23
|
+
*
|
|
24
|
+
* 1. Получение одного случайного ключа из обычного массива:
|
|
25
|
+
*
|
|
26
|
+
* ```js
|
|
27
|
+
* const array = [1, 2, 3, 4, 5];
|
|
28
|
+
* const result = array_rand(array);
|
|
29
|
+
* console.log(result); // Например, 2
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* 2. Получение одного случайного ключа из ассоциативного массива:
|
|
33
|
+
*
|
|
34
|
+
* ```js
|
|
35
|
+
* const array = { a: 1, b: 2, c: 3 };
|
|
36
|
+
* const result = array_rand(array);
|
|
37
|
+
* console.log(result); // Например, 'b'
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* 3. Получение нескольких случайных ключей из обычного массива:
|
|
41
|
+
*
|
|
42
|
+
* ```js
|
|
43
|
+
* const array = [1, 2, 3, 4, 5];
|
|
44
|
+
* const result = array_rand(array, 3);
|
|
45
|
+
* console.log(result); // Например, [0, 2, 4]
|
|
46
|
+
* ```
|
|
47
|
+
*
|
|
48
|
+
* 4. Получение нескольких случайных ключей из ассоциативного массива:
|
|
49
|
+
*
|
|
50
|
+
* ```js
|
|
51
|
+
* const array = { a: 1, b: 2, c: 3, d: 4, e: 5 };
|
|
52
|
+
* const result = array_rand(array, 3);
|
|
53
|
+
* console.log(result); // Например, ['a', 'c', 'e']
|
|
54
|
+
* ```
|
|
55
|
+
*
|
|
56
|
+
* 5. Обработка пустого массива:
|
|
57
|
+
*
|
|
58
|
+
* ```js
|
|
59
|
+
* const array = [];
|
|
60
|
+
* const result = array_rand(array);
|
|
61
|
+
* console.log(result); // null
|
|
62
|
+
* ```
|
|
63
|
+
*
|
|
64
|
+
* 6. Обработка значений, не являющихся массивами:
|
|
65
|
+
*
|
|
66
|
+
* ```js
|
|
67
|
+
* try {
|
|
68
|
+
* const result = array_rand('not an array');
|
|
69
|
+
* } catch (e) {
|
|
70
|
+
* console.error(e.message); // Параметр "arr" должен быть массивом.
|
|
71
|
+
* }
|
|
72
|
+
* ```
|
|
73
|
+
*
|
|
74
|
+
* 7. Обработка значений параметра count, не являющихся целыми числами:
|
|
75
|
+
*
|
|
76
|
+
* ```js
|
|
77
|
+
* try {
|
|
78
|
+
* const result = array_rand([1, 2, 3], 'not a number');
|
|
79
|
+
* } catch (e) {
|
|
80
|
+
* console.error(e.message); // Параметр "count" должен быть целым числом.
|
|
81
|
+
* }
|
|
82
|
+
* ```
|
|
83
|
+
*
|
|
84
|
+
* 8. Обработка значений параметра count, выходящих за пределы длины массива:
|
|
85
|
+
*
|
|
86
|
+
* ```js
|
|
87
|
+
* try {
|
|
88
|
+
* const result = array_rand([1, 2, 3], 5);
|
|
89
|
+
* } catch (e) {
|
|
90
|
+
* console.error(e.message); // Значение параметра "count" выходит за пределы длины массива.
|
|
91
|
+
* }
|
|
92
|
+
* ```
|
|
93
|
+
*
|
|
94
|
+
* @param {object} arr Исходный массив.
|
|
95
|
+
* @param {number} [count=1] Количество случайных ключей для возврата.
|
|
96
|
+
* @returns {any} Возвращает один или несколько случайных ключей из массива. Если массив пустой, возвращает `null`.
|
|
97
|
+
* @throws {TypeError} Если параметр не является массивом или если параметр count не является целым числом.
|
|
98
|
+
* @throws {Error} Если параметр count выходит за пределы длины массива.
|
|
99
|
+
*/
|
|
100
|
+
export default function array_rand(arr, count = 1) {
|
|
101
|
+
if (!is_array(arr)) {
|
|
102
|
+
throw new TypeError('Параметр "arr" должен быть массивом.');
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (!is_int(count)) {
|
|
106
|
+
throw new TypeError('Параметр "count" должен быть целым числом.');
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
if (empty(arr)) {
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const keys = Object.keys(arr);
|
|
114
|
+
|
|
115
|
+
if (count < 1 || count > keys.length) {
|
|
116
|
+
throw new Error('Значение параметра "count" выходит за пределы длины массива.');
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const result = [];
|
|
120
|
+
|
|
121
|
+
while (count > 0) {
|
|
122
|
+
const rand_index = Math.floor(Math.random() * keys.length);
|
|
123
|
+
result.push(keys[rand_index]);
|
|
124
|
+
keys.splice(rand_index, 1);
|
|
125
|
+
count--;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return result.length === 1 ? result[0] : result;
|
|
129
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import is_array from '../is_array.mjs';
|
|
2
|
+
import is_function from '../is_function.mjs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Применяет функцию обратного вызова к каждому элементу массива (слева направо), чтобы уменьшить его до одного значения.
|
|
6
|
+
*
|
|
7
|
+
* ### Описание
|
|
8
|
+
*
|
|
9
|
+
* Функция `array_reduce` используется для последовательного применения функции обратного вызова к каждому элементу массива, чтобы уменьшить его до одного значения.
|
|
10
|
+
* Она поддерживает как обычные массивы, так и ассоциативные массивы (объекты с ключами и значениями).
|
|
11
|
+
*
|
|
12
|
+
* ### Параметры
|
|
13
|
+
*
|
|
14
|
+
* - `arr` (object): Исходный массив.
|
|
15
|
+
* - `callback` (function): Функция обратного вызова, применяемая к каждому элементу массива.
|
|
16
|
+
* - `initial` (any): Начальное значение для аккумулятора. По умолчанию `null`.
|
|
17
|
+
*
|
|
18
|
+
* ### Возвращаемое значение
|
|
19
|
+
*
|
|
20
|
+
* Возвращает одно значение, полученное в результате последовательного применения функции обратного вызова к каждому элементу массива.
|
|
21
|
+
*
|
|
22
|
+
* ### Примеры использования
|
|
23
|
+
*
|
|
24
|
+
* 1. Суммирование элементов массива:
|
|
25
|
+
*
|
|
26
|
+
* ```js
|
|
27
|
+
* const array = [1, 2, 3, 4];
|
|
28
|
+
* const sum = array_reduce(array, (acc, value) => acc + value, 0);
|
|
29
|
+
* console.log(sum); // 10
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* 2. Объединение строк:
|
|
33
|
+
*
|
|
34
|
+
* ```js
|
|
35
|
+
* const array = ['a', 'b', 'c'];
|
|
36
|
+
* const result = array_reduce(array, (acc, value) => acc + value, '');
|
|
37
|
+
* console.log(result); // 'abc'
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* 3. Обработка ассоциативного массива:
|
|
41
|
+
*
|
|
42
|
+
* ```js
|
|
43
|
+
* const array = { a: 1, b: 2, c: 3 };
|
|
44
|
+
* const sum = array_reduce(array, (acc, value) => acc + value, 0);
|
|
45
|
+
* console.log(sum); // 6
|
|
46
|
+
* ```
|
|
47
|
+
*
|
|
48
|
+
* 4. Обработка значений, не являющихся массивами:
|
|
49
|
+
*
|
|
50
|
+
* ```js
|
|
51
|
+
* try {
|
|
52
|
+
* const result = array_reduce('not an array', (acc, value) => acc + value, 0);
|
|
53
|
+
* } catch (e) {
|
|
54
|
+
* console.error(e.message); // Параметр "arr" должен быть массивом.
|
|
55
|
+
* }
|
|
56
|
+
* ```
|
|
57
|
+
*
|
|
58
|
+
* 5. Обработка значений, не являющихся функциями:
|
|
59
|
+
*
|
|
60
|
+
* ```js
|
|
61
|
+
* try {
|
|
62
|
+
* const result = array_reduce([1, 2, 3], 'not a function', 0);
|
|
63
|
+
* } catch (e) {
|
|
64
|
+
* console.error(e.message); // Параметр "callback" должен быть функцией.
|
|
65
|
+
* }
|
|
66
|
+
* ```
|
|
67
|
+
*
|
|
68
|
+
* @param {object} arr Исходный массив.
|
|
69
|
+
* @param {function} callback Функция обратного вызова, применяемая к каждому элементу массива.
|
|
70
|
+
* @param {any} [initial=null] Начальное значение для аккумулятора.
|
|
71
|
+
* @returns {any} Возвращает одно значение, полученное в результате последовательного применения функции обратного вызова к каждому элементу массива.
|
|
72
|
+
* @throws {TypeError} Если параметры не являются массивом или функцией.
|
|
73
|
+
*/
|
|
74
|
+
export default function array_reduce(arr, callback, initial = null) {
|
|
75
|
+
if (!is_array(arr)) {
|
|
76
|
+
throw new TypeError('Параметр "arr" должен быть массивом.');
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (!is_function(callback)) {
|
|
80
|
+
throw new TypeError('Параметр "callback" должен быть функцией.');
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
let carry = initial;
|
|
84
|
+
|
|
85
|
+
for (const [, v] of Object.entries(arr)) {
|
|
86
|
+
carry = callback(carry, v);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return carry;
|
|
90
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import array from '../array.mjs';
|
|
2
|
+
import is_array from '../is_array.mjs';
|
|
3
|
+
import is_list from '../is_list.mjs';
|
|
4
|
+
|
|
5
|
+
export default function array_replace(arr, ...replacements) {
|
|
6
|
+
if (!is_array(arr)) {
|
|
7
|
+
throw new TypeError('Параметр "arr" должен быть массивом.');
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
if (!replacements.every((replacement) => is_array(replacement))) {
|
|
11
|
+
throw new TypeError('Параметр "replacements" должен быть массивом.');
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const result = is_list(arr) ? Array.from(arr) : array(arr);
|
|
15
|
+
|
|
16
|
+
for (const replacement of replacements) {
|
|
17
|
+
for (const [k, v] of Object.entries(replacement)) {
|
|
18
|
+
if (k in result) {
|
|
19
|
+
result[k] = v;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return result;
|
|
25
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import array from '../array.mjs';
|
|
2
|
+
import is_array from '../is_array.mjs';
|
|
3
|
+
import is_list from '../is_list.mjs';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Рекурсивно заменяет значения в массиве на значения из других массивов.
|
|
7
|
+
*
|
|
8
|
+
* ### Описание
|
|
9
|
+
*
|
|
10
|
+
* Функция `array_replace_recursive` используется для рекурсивной замены значений в массиве на значения из других массивов.
|
|
11
|
+
* Она поддерживает как обычные массивы, так и ассоциативные массивы (объекты с ключами и значениями).
|
|
12
|
+
*
|
|
13
|
+
* ### Параметры
|
|
14
|
+
*
|
|
15
|
+
* - `arr` (object): Исходный массив.
|
|
16
|
+
* - `...replacements` (object[]): Массивы с заменами.
|
|
17
|
+
*
|
|
18
|
+
* ### Возвращаемое значение
|
|
19
|
+
*
|
|
20
|
+
* Возвращает новый массив с рекурсивно заменёнными значениями.
|
|
21
|
+
*
|
|
22
|
+
* ### Примеры использования
|
|
23
|
+
*
|
|
24
|
+
* 1. Рекурсивная замена значений в обычном массиве:
|
|
25
|
+
*
|
|
26
|
+
* ```js
|
|
27
|
+
* const array = [1, 2, [3, 4]];
|
|
28
|
+
* const replacements = { 2: [5, 6] };
|
|
29
|
+
* const result = array_replace_recursive(array, replacements);
|
|
30
|
+
* console.log(result); // [1, 2, [5, 6]]
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
33
|
+
* 2. Рекурсивная замена значений в ассоциативном массиве:
|
|
34
|
+
*
|
|
35
|
+
* ```js
|
|
36
|
+
* const array = { a: 1, b: { c: 2, d: 3 } };
|
|
37
|
+
* const replacements = { b: { c: 4, e: 5 } };
|
|
38
|
+
* const result = array_replace_recursive(array, replacements);
|
|
39
|
+
* console.log(result); // { a: 1, b: { c: 4, d: 3 } }
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* 3. Возвращение массива без изменений, если замены не указаны:
|
|
43
|
+
*
|
|
44
|
+
* ```js
|
|
45
|
+
* const array = [1, 2, 3];
|
|
46
|
+
* const replacements = {};
|
|
47
|
+
* const result = array_replace_recursive(array, replacements);
|
|
48
|
+
* console.log(result); // [1, 2, 3]
|
|
49
|
+
* ```
|
|
50
|
+
*
|
|
51
|
+
* 4. Возвращение массива без изменений, если замены не соответствуют ключам:
|
|
52
|
+
*
|
|
53
|
+
* ```js
|
|
54
|
+
* const array = [1, 2, 3];
|
|
55
|
+
* const replacements = { 3: 4, 4: 5 };
|
|
56
|
+
* const result = array_replace_recursive(array, replacements);
|
|
57
|
+
* console.log(result); // [1, 2, 3]
|
|
58
|
+
* ```
|
|
59
|
+
*
|
|
60
|
+
* 5. Обработка значений, не являющихся массивами:
|
|
61
|
+
*
|
|
62
|
+
* ```js
|
|
63
|
+
* try {
|
|
64
|
+
* const result = array_replace_recursive('not an array', { 1: 4 });
|
|
65
|
+
* } catch (e) {
|
|
66
|
+
* console.error(e.message); // Параметр "arr" должен быть массивом.
|
|
67
|
+
* }
|
|
68
|
+
* ```
|
|
69
|
+
*
|
|
70
|
+
* 6. Обработка значений замен, не являющихся массивами:
|
|
71
|
+
*
|
|
72
|
+
* ```js
|
|
73
|
+
* try {
|
|
74
|
+
* const result = array_replace_recursive([1, 2, 3], 'not an array');
|
|
75
|
+
* } catch (e) {
|
|
76
|
+
* console.error(e.message); // Параметр "replacements" должен быть массивом.
|
|
77
|
+
* }
|
|
78
|
+
* ```
|
|
79
|
+
*
|
|
80
|
+
* @param {object} arr Исходный массив.
|
|
81
|
+
* @param {object[]} replacements Массивы с заменами.
|
|
82
|
+
* @returns {object} Возвращает новый массив с рекурсивно заменёнными значениями.
|
|
83
|
+
* @throws {TypeError} Если параметр не является массивом или если параметр replacements не является массивом.
|
|
84
|
+
*/
|
|
85
|
+
export default function array_replace_recursive(arr, ...replacements) {
|
|
86
|
+
if (!is_array(arr)) {
|
|
87
|
+
throw new TypeError('Параметр "arr" должен быть массивом.');
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
if (!replacements.every((replacement) => is_array(replacement))) {
|
|
91
|
+
throw new TypeError('Параметр "replacements" должен быть массивом.');
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const result = is_list(arr) ? Array.from(arr) : array(arr);
|
|
95
|
+
|
|
96
|
+
for (const replacement of replacements) {
|
|
97
|
+
for (const [k, v] of Object.entries(replacement)) {
|
|
98
|
+
if (k in result) {
|
|
99
|
+
if (is_array(v) && is_array(result[k])) {
|
|
100
|
+
result[k] = array_replace_recursive(result[k], v);
|
|
101
|
+
} else {
|
|
102
|
+
result[k] = v;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
return result;
|
|
109
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import is_array from '../is_array.mjs';
|
|
2
|
+
import is_list from '../is_list.mjs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Переворачивает массив, изменяя порядок его элементов на обратный.
|
|
6
|
+
*
|
|
7
|
+
* ### Описание
|
|
8
|
+
*
|
|
9
|
+
* Функция `array_reverse` используется для переворачивания массива, изменяя порядок его элементов на обратный.
|
|
10
|
+
* Она поддерживает как обычные массивы, так и ассоциативные массивы (объекты с ключами и значениями).
|
|
11
|
+
*
|
|
12
|
+
* ### Параметры
|
|
13
|
+
*
|
|
14
|
+
* - `arr` (object): Исходный массив.
|
|
15
|
+
*
|
|
16
|
+
* ### Возвращаемое значение
|
|
17
|
+
*
|
|
18
|
+
* Возвращает новый массив с элементами в обратном порядке.
|
|
19
|
+
*
|
|
20
|
+
* ### Примеры использования
|
|
21
|
+
*
|
|
22
|
+
* 1. Переворачивание обычного массива:
|
|
23
|
+
*
|
|
24
|
+
* ```js
|
|
25
|
+
* const array = [1, 2, 3];
|
|
26
|
+
* const result = array_reverse(array);
|
|
27
|
+
* console.log(result); // [3, 2, 1]
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* 2. Переворачивание ассоциативного массива:
|
|
31
|
+
*
|
|
32
|
+
* ```js
|
|
33
|
+
* const array = { a: 1, b: 2, c: 3 };
|
|
34
|
+
* const result = array_reverse(array);
|
|
35
|
+
* console.log(result); // [['c', 3], ['b', 2], ['a', 1]]
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* 3. Обработка значений, не являющихся массивами:
|
|
39
|
+
*
|
|
40
|
+
* ```js
|
|
41
|
+
* try {
|
|
42
|
+
* const result = array_reverse('not an array');
|
|
43
|
+
* } catch (e) {
|
|
44
|
+
* console.error(e.message); // Параметр "arr" должен быть массивом.
|
|
45
|
+
* }
|
|
46
|
+
* ```
|
|
47
|
+
*
|
|
48
|
+
* @param {object} arr Исходный массив.
|
|
49
|
+
* @returns {object} Возвращает новый массив с элементами в обратном порядке.
|
|
50
|
+
* @throws {TypeError} Если параметр не является массивом.
|
|
51
|
+
*/
|
|
52
|
+
export default function array_reverse(arr) {
|
|
53
|
+
if (!is_array(arr)) {
|
|
54
|
+
throw new TypeError('Параметр "arr" должен быть массивом.');
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (is_list(arr)) {
|
|
58
|
+
return arr.reverse();
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return Object.entries(arr).reverse();
|
|
62
|
+
}
|