@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.
Files changed (355) hide show
  1. package/CHANGELOG.md +319 -1
  2. package/docs/classes/Expect/toBe.md +61 -0
  3. package/docs/classes/Expect/toBeArray.md +52 -0
  4. package/docs/classes/Expect/toBeAssoc.md +53 -0
  5. package/docs/classes/Expect/toBeBigInt.md +52 -0
  6. package/docs/classes/Expect/toBeBool.md +53 -0
  7. package/docs/classes/Expect/toBeBoolean.md +53 -0
  8. package/docs/classes/Expect/toBeChar.md +53 -0
  9. package/docs/classes/Expect/toBeClass.md +53 -0
  10. package/docs/classes/Expect/toBeFloat.md +53 -0
  11. package/docs/classes/Expect/toBeFunction.md +52 -0
  12. package/docs/classes/Expect/toBeInfinity.md +53 -0
  13. package/docs/classes/Expect/toBeInt.md +53 -0
  14. package/docs/classes/Expect/toBeInteger.md +53 -0
  15. package/docs/classes/Expect/toBeList.md +53 -0
  16. package/docs/classes/Expect/toBeNaN.md +53 -0
  17. package/docs/classes/Expect/toBeNull.md +51 -0
  18. package/docs/classes/Expect/toBeNumber.md +52 -0
  19. package/docs/classes/Expect/toBeNumeric.md +53 -0
  20. package/docs/classes/Expect/toBeObject.md +52 -0
  21. package/docs/classes/Expect/toBeScalar.md +53 -0
  22. package/docs/classes/Expect/toBeString.md +52 -0
  23. package/docs/classes/Expect/toBeSymbol.md +53 -0
  24. package/docs/classes/Expect/toBeUndefined.md +54 -0
  25. package/docs/classes/Expect/toEqual.md +69 -0
  26. package/docs/classes/Expect/toStrictEqual.md +70 -0
  27. package/docs/classes/Expect.md +87 -0
  28. package/docs/classes/Type/expectArray.md +63 -0
  29. package/docs/classes/Type/expectAssoc.md +65 -0
  30. package/docs/classes/Type/expectBigInt.md +63 -0
  31. package/docs/classes/Type/expectBool.md +65 -0
  32. package/docs/classes/Type/expectBoolean.md +65 -0
  33. package/docs/classes/Type/expectChar.md +63 -0
  34. package/docs/classes/Type/expectClass.md +63 -0
  35. package/docs/classes/Type/expectFloat.md +68 -0
  36. package/docs/classes/Type/expectFunction.md +63 -0
  37. package/docs/classes/Type/expectInfinity.md +65 -0
  38. package/docs/classes/Type/expectInt.md +64 -0
  39. package/docs/classes/Type/expectInteger.md +64 -0
  40. package/docs/classes/Type/expectList.md +63 -0
  41. package/docs/classes/Type/expectNaN.md +63 -0
  42. package/docs/classes/Type/expectNull.md +63 -0
  43. package/docs/classes/Type/expectNumber.md +63 -0
  44. package/docs/classes/Type/expectNumeric.md +63 -0
  45. package/docs/classes/Type/expectObject.md +64 -0
  46. package/docs/classes/Type/expectScalar.md +63 -0
  47. package/docs/classes/Type/expectString.md +63 -0
  48. package/docs/classes/Type/expectSymbol.md +63 -0
  49. package/docs/classes/Type/expectUndefined.md +63 -0
  50. package/docs/classes/Type.md +101 -2
  51. package/docs/classes.md +2 -1
  52. package/docs/helpers/array/array_chunk.md +80 -0
  53. package/docs/helpers/array/array_chunk_with_keys.md +81 -0
  54. package/docs/helpers/array/array_column.md +110 -0
  55. package/docs/helpers/array/array_combine.md +77 -0
  56. package/docs/helpers/array/array_count_values.md +71 -0
  57. package/docs/helpers/array/array_diff.md +97 -0
  58. package/docs/helpers/array/array_diff_assoc.md +81 -0
  59. package/docs/helpers/array/array_diff_key.md +81 -0
  60. package/docs/helpers/array/array_diff_uassoc.md +101 -0
  61. package/docs/helpers/array/array_diff_ukey.md +101 -0
  62. package/docs/helpers/array/array_fill.md +81 -0
  63. package/docs/helpers/array/array_fill_keys.md +73 -0
  64. package/docs/helpers/array/array_filter.md +79 -0
  65. package/docs/helpers/array/array_flip.md +70 -0
  66. package/docs/helpers/array/array_index_max.md +78 -0
  67. package/docs/helpers/array/array_index_min.md +78 -0
  68. package/docs/helpers/array/array_intersect.md +91 -0
  69. package/docs/helpers/array/array_intersect_assoc.md +91 -0
  70. package/docs/helpers/array/array_intersect_key.md +91 -0
  71. package/docs/helpers/array/array_intersect_uassoc.md +101 -0
  72. package/docs/helpers/array/array_intersect_ukey.md +101 -0
  73. package/docs/helpers/array/array_key_exists.md +73 -0
  74. package/docs/helpers/array/array_key_first.md +62 -0
  75. package/docs/helpers/array/array_key_last.md +62 -0
  76. package/docs/helpers/array/array_key_to_lower_case.md +57 -0
  77. package/docs/helpers/array/array_key_to_upper_case.md +57 -0
  78. package/docs/helpers/array/array_keys.md +62 -0
  79. package/docs/helpers/array/array_map.md +69 -0
  80. package/docs/helpers/array/array_merge.md +67 -0
  81. package/docs/helpers/array/array_merge_recursive.md +86 -0
  82. package/docs/helpers/array/array_pad.md +83 -0
  83. package/docs/helpers/array/array_pop.md +64 -0
  84. package/docs/helpers/array/array_product.md +62 -0
  85. package/docs/helpers/array/array_push.md +57 -0
  86. package/docs/helpers/array/array_rand.md +99 -0
  87. package/docs/helpers/array/array_reduce.md +77 -0
  88. package/docs/helpers/array/array_replace.md +85 -0
  89. package/docs/helpers/array/array_replace_recursive.md +87 -0
  90. package/docs/helpers/array/array_reverse.md +55 -0
  91. package/docs/helpers/array/array_search.md +74 -0
  92. package/docs/helpers/array/array_shift.md +64 -0
  93. package/docs/helpers/array/array_slice.md +65 -0
  94. package/docs/helpers/array/array_splice.md +103 -0
  95. package/docs/helpers/array/array_sum.md +55 -0
  96. package/docs/helpers/array/array_udiff.md +97 -0
  97. package/docs/helpers/array/array_udiff_assoc.md +101 -0
  98. package/docs/helpers/array/array_udiff_uassoc.md +88 -0
  99. package/docs/helpers/array/array_uintersect.md +101 -0
  100. package/docs/helpers/array/array_uintersect_assoc.md +102 -0
  101. package/docs/helpers/array/array_uintersect_uassoc.md +135 -0
  102. package/docs/helpers/array/array_unique.md +54 -0
  103. package/docs/helpers/array/array_unshift.md +58 -0
  104. package/docs/helpers/array/array_values.md +54 -0
  105. package/docs/helpers/array/array_walk.md +87 -0
  106. package/docs/helpers/array/array_walk_recursive.md +93 -0
  107. package/docs/helpers/array/count.md +54 -0
  108. package/docs/helpers/array/in_array.md +65 -0
  109. package/docs/helpers/array/natsort.md +60 -0
  110. package/docs/helpers/array/range.md +76 -0
  111. package/docs/helpers/array/shuffle.md +74 -0
  112. package/docs/helpers/array/sort.md +79 -0
  113. package/docs/helpers/expect.md +58 -0
  114. package/docs/helpers/expect_array.md +63 -0
  115. package/docs/helpers/expect_assoc.md +65 -0
  116. package/docs/helpers/expect_bigint.md +63 -0
  117. package/docs/helpers/expect_bool.md +65 -0
  118. package/docs/helpers/expect_boolean.md +65 -0
  119. package/docs/helpers/expect_char.md +63 -0
  120. package/docs/helpers/expect_class.md +63 -0
  121. package/docs/helpers/expect_float.md +65 -0
  122. package/docs/helpers/expect_function.md +63 -0
  123. package/docs/helpers/expect_infinity.md +65 -0
  124. package/docs/helpers/expect_int.md +65 -0
  125. package/docs/helpers/expect_integer.md +65 -0
  126. package/docs/helpers/expect_list.md +63 -0
  127. package/docs/helpers/expect_nan.md +63 -0
  128. package/docs/helpers/expect_null.md +63 -0
  129. package/docs/helpers/expect_number.md +63 -0
  130. package/docs/helpers/expect_numeric.md +63 -0
  131. package/docs/helpers/expect_object.md +64 -0
  132. package/docs/helpers/expect_scalar.md +63 -0
  133. package/docs/helpers/expect_string.md +63 -0
  134. package/docs/helpers/expect_symbol.md +63 -0
  135. package/docs/helpers/expect_undefined.md +64 -0
  136. package/docs/helpers/is_char.md +84 -0
  137. package/docs/helpers/is_equal.md +75 -0
  138. package/docs/helpers/string/is_digit_char.md +70 -0
  139. package/docs/helpers/string/is_whitespace_char.md +70 -0
  140. package/docs/helpers/string/natcompare.md +69 -0
  141. package/docs/helpers/string/natcompare_numeric.md +70 -0
  142. package/docs/helpers.md +172 -1
  143. package/index.mjs +91 -1
  144. package/package.json +1 -1
  145. package/prettier.config.mjs +2 -1
  146. package/src/classes/Expect.mjs +1445 -0
  147. package/src/classes/Type.mjs +2739 -1284
  148. package/src/constants.mjs +83 -14
  149. package/src/helpers/array/array_chunk.mjs +102 -0
  150. package/src/helpers/array/array_chunk_with_keys.mjs +102 -0
  151. package/src/helpers/array/array_column.mjs +131 -0
  152. package/src/helpers/array/array_combine.mjs +26 -0
  153. package/src/helpers/array/array_count_values.mjs +82 -0
  154. package/src/helpers/array/array_diff.mjs +77 -0
  155. package/src/helpers/array/array_diff_assoc.mjs +56 -0
  156. package/src/helpers/array/array_diff_key.mjs +56 -0
  157. package/src/helpers/array/array_diff_uassoc.mjs +76 -0
  158. package/src/helpers/array/array_diff_ukey.mjs +71 -0
  159. package/src/helpers/array/array_fill.mjs +108 -0
  160. package/src/helpers/array/array_fill_keys.mjs +90 -0
  161. package/src/helpers/array/array_filter.mjs +105 -0
  162. package/src/helpers/array/array_flip.mjs +58 -0
  163. package/src/helpers/array/array_index_max.mjs +82 -0
  164. package/src/helpers/array/array_index_min.mjs +82 -0
  165. package/src/helpers/array/array_intersect.mjs +71 -0
  166. package/src/helpers/array/array_intersect_assoc.mjs +67 -0
  167. package/src/helpers/array/array_intersect_key.mjs +67 -0
  168. package/src/helpers/array/array_intersect_uassoc.mjs +77 -0
  169. package/src/helpers/array/array_intersect_ukey.mjs +72 -0
  170. package/src/helpers/array/array_key_exists.mjs +83 -0
  171. package/src/helpers/array/array_key_first.mjs +73 -0
  172. package/src/helpers/array/array_key_last.mjs +74 -0
  173. package/src/helpers/array/array_key_to_lower_case.mjs +71 -0
  174. package/src/helpers/array/array_key_to_upper_case.mjs +71 -0
  175. package/src/helpers/array/array_keys.mjs +65 -0
  176. package/src/helpers/array/array_map.mjs +84 -0
  177. package/src/helpers/array/array_merge.mjs +95 -0
  178. package/src/helpers/array/array_merge_recursive.mjs +153 -0
  179. package/src/helpers/array/array_pad.mjs +105 -0
  180. package/src/helpers/array/array_pop.mjs +82 -0
  181. package/src/helpers/array/array_product.mjs +67 -0
  182. package/src/helpers/array/array_push.mjs +75 -0
  183. package/src/helpers/array/array_rand.mjs +129 -0
  184. package/src/helpers/array/array_reduce.mjs +90 -0
  185. package/src/helpers/array/array_replace.mjs +25 -0
  186. package/src/helpers/array/array_replace_recursive.mjs +109 -0
  187. package/src/helpers/array/array_reverse.mjs +62 -0
  188. package/src/helpers/array/array_search.mjs +104 -0
  189. package/src/helpers/array/array_shift.mjs +78 -0
  190. package/src/helpers/array/array_slice.mjs +99 -0
  191. package/src/helpers/array/array_splice.mjs +218 -0
  192. package/src/helpers/array/array_sum.mjs +60 -0
  193. package/src/helpers/array/array_udiff.mjs +91 -0
  194. package/src/helpers/array/array_udiff_assoc.mjs +71 -0
  195. package/src/helpers/array/array_udiff_uassoc.mjs +124 -0
  196. package/src/helpers/array/array_uintersect.mjs +72 -0
  197. package/src/helpers/array/array_uintersect_assoc.mjs +77 -0
  198. package/src/helpers/array/array_uintersect_uassoc.mjs +121 -0
  199. package/src/helpers/array/array_unique.mjs +77 -0
  200. package/src/helpers/array/array_unshift.mjs +64 -0
  201. package/src/helpers/array/array_values.mjs +57 -0
  202. package/src/helpers/array/array_walk.mjs +95 -0
  203. package/src/helpers/array/array_walk_recursive.mjs +104 -0
  204. package/src/helpers/array/count.mjs +57 -0
  205. package/src/helpers/array/in_array.mjs +67 -0
  206. package/src/helpers/array/natsort.mjs +62 -0
  207. package/src/helpers/array/range.mjs +121 -0
  208. package/src/helpers/array/shuffle.mjs +73 -0
  209. package/src/helpers/array/sort.mjs +69 -0
  210. package/src/helpers/expect.mjs +44 -0
  211. package/src/helpers/expect_array.mjs +66 -0
  212. package/src/helpers/expect_assoc.mjs +66 -0
  213. package/src/helpers/expect_bigint.mjs +66 -0
  214. package/src/helpers/expect_bool.mjs +66 -0
  215. package/src/helpers/expect_boolean.mjs +57 -0
  216. package/src/helpers/expect_char.mjs +66 -0
  217. package/src/helpers/expect_class.mjs +66 -0
  218. package/src/helpers/expect_float.mjs +66 -0
  219. package/src/helpers/expect_function.mjs +66 -0
  220. package/src/helpers/expect_infinity.mjs +66 -0
  221. package/src/helpers/expect_int.mjs +66 -0
  222. package/src/helpers/expect_integer.mjs +57 -0
  223. package/src/helpers/expect_list.mjs +66 -0
  224. package/src/helpers/expect_nan.mjs +66 -0
  225. package/src/helpers/expect_null.mjs +66 -0
  226. package/src/helpers/expect_number.mjs +66 -0
  227. package/src/helpers/expect_numeric.mjs +66 -0
  228. package/src/helpers/expect_object.mjs +67 -0
  229. package/src/helpers/expect_scalar.mjs +66 -0
  230. package/src/helpers/expect_string.mjs +65 -0
  231. package/src/helpers/expect_symbol.mjs +66 -0
  232. package/src/helpers/expect_undefined.mjs +66 -0
  233. package/src/helpers/is_char.mjs +54 -0
  234. package/src/helpers/is_equal.mjs +94 -0
  235. package/src/helpers/string/is_digit_char.mjs +60 -0
  236. package/src/helpers/string/is_whitespace_char.mjs +54 -0
  237. package/src/helpers/string/natcompare.mjs +107 -0
  238. package/src/helpers/string/natcompare_numeric.mjs +131 -0
  239. package/tests/classes/Expect/toBe.test.mjs +60 -0
  240. package/tests/classes/Expect/toBeArray.test.mjs +46 -0
  241. package/tests/classes/Expect/toBeAssoc.test.mjs +48 -0
  242. package/tests/classes/Expect/toBeBigInt.test.mjs +46 -0
  243. package/tests/classes/Expect/toBeBool.test.mjs +48 -0
  244. package/tests/classes/Expect/toBeBoolean.test.mjs +48 -0
  245. package/tests/classes/Expect/toBeChar.test.mjs +46 -0
  246. package/tests/classes/Expect/toBeClass.test.mjs +48 -0
  247. package/tests/classes/Expect/toBeFloat.test.mjs +48 -0
  248. package/tests/classes/Expect/toBeFunction.test.mjs +51 -0
  249. package/tests/classes/Expect/toBeInfinity.test.mjs +48 -0
  250. package/tests/classes/Expect/toBeInt.test.mjs +48 -0
  251. package/tests/classes/Expect/toBeInteger.test.mjs +48 -0
  252. package/tests/classes/Expect/toBeList.test.mjs +46 -0
  253. package/tests/classes/Expect/toBeNaN.test.mjs +46 -0
  254. package/tests/classes/Expect/toBeNull.test.mjs +46 -0
  255. package/tests/classes/Expect/toBeNumber.test.mjs +46 -0
  256. package/tests/classes/Expect/toBeNumeric.test.mjs +53 -0
  257. package/tests/classes/Expect/toBeObject.test.mjs +47 -0
  258. package/tests/classes/Expect/toBeScalar.test.mjs +63 -0
  259. package/tests/classes/Expect/toBeString.test.mjs +46 -0
  260. package/tests/classes/Expect/toBeSymbol.test.mjs +46 -0
  261. package/tests/classes/Expect/toBeUndefined.test.mjs +50 -0
  262. package/tests/classes/Expect/toEqual.test.mjs +66 -0
  263. package/tests/classes/Expect/toStrictEqual.test.mjs +73 -0
  264. package/tests/classes/Type.test.mjs +1320 -1262
  265. package/tests/helpers/array/array_chunk.test.mjs +49 -0
  266. package/tests/helpers/array/array_chunk_with_keys.test.mjs +45 -0
  267. package/tests/helpers/array/array_column.test.mjs +87 -0
  268. package/tests/helpers/array/array_combine.test.mjs +41 -0
  269. package/tests/helpers/array/array_count_values.test.mjs +40 -0
  270. package/tests/helpers/array/array_diff.test.mjs +78 -0
  271. package/tests/helpers/array/array_diff_assoc.test.mjs +64 -0
  272. package/tests/helpers/array/array_diff_key.test.mjs +64 -0
  273. package/tests/helpers/array/array_diff_uassoc.test.mjs +73 -0
  274. package/tests/helpers/array/array_diff_ukey.test.mjs +77 -0
  275. package/tests/helpers/array/array_fill.test.mjs +47 -0
  276. package/tests/helpers/array/array_fill_keys.test.mjs +35 -0
  277. package/tests/helpers/array/array_filter.test.mjs +38 -0
  278. package/tests/helpers/array/array_flip.test.mjs +33 -0
  279. package/tests/helpers/array/array_index_max.test.mjs +41 -0
  280. package/tests/helpers/array/array_index_min.test.mjs +41 -0
  281. package/tests/helpers/array/array_intersect.test.mjs +65 -0
  282. package/tests/helpers/array/array_intersect_assoc.test.mjs +65 -0
  283. package/tests/helpers/array/array_intersect_key.test.mjs +65 -0
  284. package/tests/helpers/array/array_intersect_uassoc.test.mjs +76 -0
  285. package/tests/helpers/array/array_intersect_ukey.test.mjs +74 -0
  286. package/tests/helpers/array/array_key_exists.test.mjs +36 -0
  287. package/tests/helpers/array/array_key_first.test.mjs +29 -0
  288. package/tests/helpers/array/array_key_last.test.mjs +29 -0
  289. package/tests/helpers/array/array_key_to_lower_case.test.mjs +23 -0
  290. package/tests/helpers/array/array_key_to_upper_case.test.mjs +23 -0
  291. package/tests/helpers/array/array_keys.test.mjs +27 -0
  292. package/tests/helpers/array/array_map.test.mjs +32 -0
  293. package/tests/helpers/array/array_merge.test.mjs +37 -0
  294. package/tests/helpers/array/array_merge_recursive.test.mjs +65 -0
  295. package/tests/helpers/array/array_pad.test.mjs +48 -0
  296. package/tests/helpers/array/array_pop.test.mjs +29 -0
  297. package/tests/helpers/array/array_product.test.mjs +33 -0
  298. package/tests/helpers/array/array_push.test.mjs +31 -0
  299. package/tests/helpers/array/array_rand.test.mjs +59 -0
  300. package/tests/helpers/array/array_reduce.test.mjs +44 -0
  301. package/tests/helpers/array/array_replace.test.mjs +46 -0
  302. package/tests/helpers/array/array_replace_recursive.test.mjs +46 -0
  303. package/tests/helpers/array/array_reverse.test.mjs +31 -0
  304. package/tests/helpers/array/array_search.test.mjs +48 -0
  305. package/tests/helpers/array/array_shift.test.mjs +29 -0
  306. package/tests/helpers/array/array_slice.test.mjs +49 -0
  307. package/tests/helpers/array/array_splice.test.mjs +67 -0
  308. package/tests/helpers/array/array_sum.test.mjs +27 -0
  309. package/tests/helpers/array/array_udiff.test.mjs +95 -0
  310. package/tests/helpers/array/array_udiff_assoc.test.mjs +77 -0
  311. package/tests/helpers/array/array_udiff_uassoc.test.mjs +89 -0
  312. package/tests/helpers/array/array_uintersect.test.mjs +78 -0
  313. package/tests/helpers/array/array_uintersect_assoc.test.mjs +80 -0
  314. package/tests/helpers/array/array_uintersect_uassoc.test.mjs +122 -0
  315. package/tests/helpers/array/array_unique.test.mjs +27 -0
  316. package/tests/helpers/array/array_unshift.test.mjs +31 -0
  317. package/tests/helpers/array/array_values.test.mjs +27 -0
  318. package/tests/helpers/array/array_walk.test.mjs +48 -0
  319. package/tests/helpers/array/array_walk_recursive.test.mjs +53 -0
  320. package/tests/helpers/array/count.test.mjs +27 -0
  321. package/tests/helpers/array/in_array.test.mjs +52 -0
  322. package/tests/helpers/array/natsort.test.mjs +71 -0
  323. package/tests/helpers/array/range.test.mjs +51 -0
  324. package/tests/helpers/array/shuffle.test.mjs +42 -0
  325. package/tests/helpers/array/sort.test.mjs +60 -0
  326. package/tests/helpers/array.test.mjs +58 -58
  327. package/tests/helpers/expect.test.mjs +95 -0
  328. package/tests/helpers/expect_array.test.mjs +71 -0
  329. package/tests/helpers/expect_assoc.test.mjs +61 -0
  330. package/tests/helpers/expect_bigint.test.mjs +63 -0
  331. package/tests/helpers/expect_bool.test.mjs +59 -0
  332. package/tests/helpers/expect_boolean.test.mjs +61 -0
  333. package/tests/helpers/expect_char.test.mjs +63 -0
  334. package/tests/helpers/expect_class.test.mjs +64 -0
  335. package/tests/helpers/expect_float.test.mjs +64 -0
  336. package/tests/helpers/expect_function.test.mjs +65 -0
  337. package/tests/helpers/expect_infinity.test.mjs +62 -0
  338. package/tests/helpers/expect_int.test.mjs +57 -0
  339. package/tests/helpers/expect_integer.test.mjs +59 -0
  340. package/tests/helpers/expect_list.test.mjs +73 -0
  341. package/tests/helpers/expect_nan.test.mjs +57 -0
  342. package/tests/helpers/expect_null.test.mjs +57 -0
  343. package/tests/helpers/expect_number.test.mjs +57 -0
  344. package/tests/helpers/expect_numeric.test.mjs +57 -0
  345. package/tests/helpers/expect_object.test.mjs +63 -0
  346. package/tests/helpers/expect_scalar.test.mjs +72 -0
  347. package/tests/helpers/expect_string.test.mjs +65 -0
  348. package/tests/helpers/expect_symbol.test.mjs +66 -0
  349. package/tests/helpers/expect_undefined.test.mjs +59 -0
  350. package/tests/helpers/is_char.test.mjs +40 -0
  351. package/tests/helpers/is_equal.test.mjs +110 -0
  352. package/tests/helpers/string/is_digit_char.test.mjs +32 -0
  353. package/tests/helpers/string/is_whitespace_char.test.mjs +32 -0
  354. package/tests/helpers/string/natcompare.test.mjs +100 -0
  355. package/tests/helpers/string/natcompare_numeric.test.mjs +110 -0
@@ -0,0 +1,56 @@
1
+ import array_diff_ukey from './array_diff_ukey.mjs';
2
+
3
+ /**
4
+ * Вычисляет расхождение между массивами с использованием стандартной функции сравнения ключей.
5
+ *
6
+ * ### Описание
7
+ *
8
+ * Функция `array_diff_key` используется для вычисления расхождения между массивами с использованием стандартной функции сравнения ключей.
9
+ * Она возвращает ассоциативный массив, содержащий элементы из первого массива, которые отсутствуют в других массивах.
10
+ *
11
+ * ### Параметры
12
+ *
13
+ * - `original_array` (object): Исходный массив.
14
+ * - `...arrays` (object): Массивы для сравнения.
15
+ *
16
+ * ### Возвращаемое значение
17
+ *
18
+ * Возвращает ассоциативный массив, содержащий элементы из первого массива, которые отсутствуют в других массивах.
19
+ *
20
+ * ### Примеры использования
21
+ *
22
+ * 1. Сравнение массивов:
23
+ *
24
+ * ```js
25
+ * const original_array = { a: 1, b: 2, c: 3 };
26
+ * const array1 = { a: 1, b: 2 };
27
+ * const result = array_diff_key(original_array, array1);
28
+ * console.log(result); // { c: 3 }
29
+ * ```
30
+ *
31
+ * 2. Обработка пустых массивов:
32
+ *
33
+ * ```js
34
+ * const original_array = {};
35
+ * const array1 = {};
36
+ * const result = array_diff_key(original_array, array1);
37
+ * console.log(result); // {}
38
+ * ```
39
+ *
40
+ * 3. Сравнение массивов с различными типами данных:
41
+ *
42
+ * ```js
43
+ * const original_array = { a: 1, b: '2', c: true };
44
+ * const array1 = { a: 1, b: 2, d: false };
45
+ * const result = array_diff_key(original_array, array1);
46
+ * console.log(result); // { c: true }
47
+ * ```
48
+ *
49
+ * @param {object} original_array Исходный массив.
50
+ * @param {...object} arrays Массивы для сравнения.
51
+ * @returns {object} Возвращает ассоциативный массив, содержащий элементы из первого массива, которые отсутствуют в других массивах.
52
+ * @throws {TypeError} Если параметры не являются массивами.
53
+ */
54
+ export default function array_diff_key(original_array, ...arrays) {
55
+ return array_diff_ukey((a, b) => a === b, original_array, ...arrays);
56
+ }
@@ -0,0 +1,76 @@
1
+ import array_udiff_uassoc from './array_udiff_uassoc.mjs';
2
+
3
+ /**
4
+ * Вычисляет расхождение между массивами с использованием пользовательской функции сравнения ключей.
5
+ *
6
+ * ### Описание
7
+ *
8
+ * Функция `array_diff_uassoc` используется для вычисления расхождения между массивами с использованием пользовательской функции сравнения ключей.
9
+ * Она возвращает ассоциативный массив, содержащий элементы из первого массива, которые отсутствуют в других массивах.
10
+ *
11
+ * ### Параметры
12
+ *
13
+ * - `key_compare_func` (function): Функция для сравнения ключей.
14
+ * - `original_array` (object): Исходный массив.
15
+ * - `...arrays` (object): Массивы для сравнения.
16
+ *
17
+ * ### Возвращаемое значение
18
+ *
19
+ * Возвращает ассоциативный массив, содержащий элементы из первого массива, которые отсутствуют в других массивах.
20
+ *
21
+ * ### Примеры использования
22
+ *
23
+ * 1. Сравнение массивов с использованием пользовательской функции сравнения:
24
+ *
25
+ * ```js
26
+ * const key_compare_func = (a, b) => a === b;
27
+ * const original_array = { a: 1, b: 2, c: 3 };
28
+ * const array1 = { a: 1, b: 2 };
29
+ * const result = array_diff_uassoc(key_compare_func, original_array, array1);
30
+ * console.log(result); // { c: 3 }
31
+ * ```
32
+ *
33
+ * 2. Обработка пустых массивов:
34
+ *
35
+ * ```js
36
+ * const key_compare_func = (a, b) => a === b;
37
+ * const original_array = {};
38
+ * const array1 = {};
39
+ * const result = array_diff_uassoc(key_compare_func, original_array, array1);
40
+ * console.log(result); // {}
41
+ * ```
42
+ *
43
+ * 3. Обработка значений, не являющихся массивами:
44
+ *
45
+ * ```js
46
+ * try {
47
+ * const result = array_diff_uassoc('not a function', 'not an array');
48
+ * } catch (e) {
49
+ * console.error(e.message); // Параметр "key_compare_func" должен быть функцией.
50
+ * }
51
+ * ```
52
+ *
53
+ * 4. Сравнение массивов с различными типами данных:
54
+ *
55
+ * ```js
56
+ * const key_compare_func = (a, b) => a === b;
57
+ * const original_array = { a: 1, b: '2', c: true };
58
+ * const array1 = { a: 1, b: 2, d: false };
59
+ * const result = array_diff_uassoc(key_compare_func, original_array, array1);
60
+ * console.log(result); // { c: true }
61
+ * ```
62
+ *
63
+ * @param {function} key_compare_func Функция для сравнения ключей.
64
+ * @param {object} original_array Исходный массив.
65
+ * @param {...object} arrays Массивы для сравнения.
66
+ * @returns {object} Возвращает ассоциативный массив, содержащий элементы из первого массива, которые отсутствуют в других массивах.
67
+ * @throws {TypeError} Если параметры не являются функциями или массивами.
68
+ */
69
+ export default function array_diff_uassoc(key_compare_func, original_array, ...arrays) {
70
+ return array_udiff_uassoc(
71
+ (a, b) => JSON.stringify(a) === JSON.stringify(b),
72
+ key_compare_func,
73
+ original_array,
74
+ ...arrays,
75
+ );
76
+ }
@@ -0,0 +1,71 @@
1
+ import array_udiff_uassoc from './array_udiff_uassoc.mjs';
2
+
3
+ /**
4
+ * Вычисляет расхождение между массивами с использованием пользовательской функции сравнения для ключей.
5
+ *
6
+ * ### Описание
7
+ *
8
+ * Функция `array_diff_ukey` используется для вычисления расхождения между массивами с использованием пользовательской функции сравнения для ключей.
9
+ * Она возвращает ассоциативный массив, содержащий элементы из первого массива, которые отсутствуют в других массивах.
10
+ *
11
+ * ### Параметры
12
+ *
13
+ * - `key_compare_func` (function): Функция для сравнения ключей.
14
+ * - `original_array` (object): Исходный массив.
15
+ * - `...arrays` (object): Массивы для сравнения.
16
+ *
17
+ * ### Возвращаемое значение
18
+ *
19
+ * Возвращает ассоциативный массив, содержащий элементы из первого массива, которые отсутствуют в других массивах.
20
+ *
21
+ * ### Примеры использования
22
+ *
23
+ * 1. Сравнение массивов с использованием пользовательской функции сравнения ключей:
24
+ *
25
+ * ```js
26
+ * const key_compare_func = (a, b) => a === b;
27
+ * const original_array = { a: 1, b: 2, c: 3 };
28
+ * const array1 = { a: 1, b: 2 };
29
+ * const result = array_diff_ukey(key_compare_func, original_array, array1);
30
+ * console.log(result); // { c: 3 }
31
+ * ```
32
+ *
33
+ * 2. Обработка пустых массивов:
34
+ *
35
+ * ```js
36
+ * const key_compare_func = (a, b) => a === b;
37
+ * const original_array = {};
38
+ * const array1 = {};
39
+ * const result = array_diff_ukey(key_compare_func, original_array, array1);
40
+ * console.log(result); // {}
41
+ * ```
42
+ *
43
+ * 3. Обработка значений, не являющихся массивами:
44
+ *
45
+ * ```js
46
+ * try {
47
+ * const result = array_diff_ukey('not a function', 'not an array');
48
+ * } catch (e) {
49
+ * console.error(e.message); // Параметр "key_compare_func" должен быть функцией.
50
+ * }
51
+ * ```
52
+ *
53
+ * 4. Сравнение массивов с различными типами данных:
54
+ *
55
+ * ```js
56
+ * const key_compare_func = (a, b) => a === b;
57
+ * const original_array = { a: 1, b: '2', c: true };
58
+ * const array1 = { a: 1, b: 2, d: false };
59
+ * const result = array_diff_ukey(key_compare_func, original_array, array1);
60
+ * console.log(result); // { c: true }
61
+ * ```
62
+ *
63
+ * @param {function} key_compare_func Функция для сравнения ключей.
64
+ * @param {object} original_array Исходный массив.
65
+ * @param {...object} arrays Массивы для сравнения.
66
+ * @returns {object} Возвращает ассоциативный массив, содержащий элементы из первого массива, которые отсутствуют в других массивах.
67
+ * @throws {TypeError} Если параметры не являются функциями или массивами.
68
+ */
69
+ export default function array_diff_ukey(key_compare_func, original_array, ...arrays) {
70
+ return array_udiff_uassoc(() => true, key_compare_func, original_array, ...arrays);
71
+ }
@@ -0,0 +1,108 @@
1
+ import array from '../array.mjs';
2
+ import is_array from '../is_array.mjs';
3
+ import is_int from '../is_int.mjs';
4
+ import is_list from '../is_list.mjs';
5
+
6
+ /**
7
+ * Заполняет массив значениями, начиная с указанного индекса.
8
+ *
9
+ * ### Описание
10
+ *
11
+ * Функция `array_fill` используется для заполнения массива значениями, начиная с указанного индекса.
12
+ * Она возвращает массив, содержащий заданное количество элементов, заполненных указанным значением.
13
+ *
14
+ * ### Параметры
15
+ *
16
+ * - `arr` (object): Исходный массив.
17
+ * - `start_index` (number): Индекс, с которого начинается заполнение массива.
18
+ * - `count` (number): Количество элементов для заполнения.
19
+ * - `value` (any): Значение, которым будет заполнен массив.
20
+ *
21
+ * ### Возвращаемое значение
22
+ *
23
+ * Возвращает массив, содержащий заданное количество элементов, заполненных указанным значением.
24
+ *
25
+ * ### Примеры использования
26
+ *
27
+ * 1. Заполнение пустого массива значениями:
28
+ *
29
+ * ```js
30
+ * const result = array_fill([], 0, 3, 'a');
31
+ * console.log(result); // ['a', 'a', 'a']
32
+ * ```
33
+ *
34
+ * 2. Заполнение массива значениями с указанного индекса:
35
+ *
36
+ * ```js
37
+ * const result = array_fill([], 2, 3, 'b');
38
+ * console.log(result); // [undefined, undefined, 'b', 'b', 'b']
39
+ * ```
40
+ *
41
+ * 3. Заполнение существующего массива значениями:
42
+ *
43
+ * ```js
44
+ * const existingArray = [1, 2, 3];
45
+ * const result = array_fill(existingArray, 1, 2, 'c');
46
+ * console.log(result); // [1, 'c', 'c']
47
+ * ```
48
+ *
49
+ * 4. Обработка отрицательных значений для `count`:
50
+ *
51
+ * ```js
52
+ * try {
53
+ * const result = array_fill([], 0, -1, 'd');
54
+ * } catch (e) {
55
+ * console.error(e.message); // Параметр "count" должен быть равен или больше нуля.
56
+ * }
57
+ * ```
58
+ *
59
+ * 5. Обработка значений, не являющихся целыми числами:
60
+ *
61
+ * ```js
62
+ * try {
63
+ * const result = array_fill([], 0.5, 3, 'e');
64
+ * } catch (e) {
65
+ * console.error(e.message); // Параметр "start_index" должен быть целым числом.
66
+ * }
67
+ * ```
68
+ *
69
+ * 6. Заполнение ассоциативного массива значениями:
70
+ *
71
+ * ```js
72
+ * const assocArray = { a: 1, b: 2 };
73
+ * const result = array_fill(assocArray, 2, 3, 'f');
74
+ * console.log(result); // { a: 1, b: 2, 2: 'f', 3: 'f', 4: 'f' }
75
+ * ```
76
+ *
77
+ * @param {object} arr Исходный массив.
78
+ * @param {number} start_index Индекс, с которого начинается заполнение массива.
79
+ * @param {number} count Количество элементов для заполнения.
80
+ * @param {any} value Значение, которым будет заполнен массив.
81
+ * @returns {object} Возвращает массив, содержащий заданное количество элементов, заполненных указанным значением.
82
+ * @throws {TypeError} Если параметры не являются массивами или целыми числами, или если `count` меньше нуля.
83
+ */
84
+ export default function array_fill(arr, start_index, count, value) {
85
+ if (!is_array(arr)) {
86
+ throw new TypeError('Параметр "arr" должен быть массивом.');
87
+ }
88
+
89
+ if (!is_int(start_index)) {
90
+ throw new TypeError('Параметр "start_index" должен быть целым числом.');
91
+ }
92
+
93
+ if (!is_int(count)) {
94
+ throw new TypeError('Параметр "count" должен быть целым числом.');
95
+ }
96
+
97
+ if (count < 0) {
98
+ throw new TypeError('Параметр "count" должен быть равен или больше нуля.');
99
+ }
100
+
101
+ const result = is_list(arr) ? Array.from(arr) : array(arr);
102
+
103
+ for (let index = start_index; index < start_index + count; index++) {
104
+ result[index] = value;
105
+ }
106
+
107
+ return result;
108
+ }
@@ -0,0 +1,90 @@
1
+ import array from '../array.mjs';
2
+ import is_array from '../is_array.mjs';
3
+ import is_list from '../is_list.mjs';
4
+
5
+ /**
6
+ * Заполняет массив значениями по указанным ключам.
7
+ *
8
+ * ### Описание
9
+ *
10
+ * Функция `array_fill_keys` используется для заполнения массива значениями по указанным ключам.
11
+ * Она возвращает массив, содержащий элементы, заполненные указанным значением по указанным ключам.
12
+ *
13
+ * ### Параметры
14
+ *
15
+ * - `arr` (array): Исходный массив.
16
+ * - `keys` (array): Массив ключей, по которым будет происходить заполнение.
17
+ * - `value` (any): Значение, которым будет заполнен массив.
18
+ *
19
+ * ### Возвращаемое значение
20
+ *
21
+ * Возвращает массив, содержащий элементы, заполненные указанным значением по указанным ключам.
22
+ *
23
+ * ### Примеры использования
24
+ *
25
+ * 1. Заполнение пустого массива значениями по ключам:
26
+ *
27
+ * ```js
28
+ * const result = array_fill_keys([], [0, 1, 2], 'a');
29
+ * console.log(result); // ['a', 'a', 'a']
30
+ * ```
31
+ *
32
+ * 2. Заполнение существующего массива значениями по ключам:
33
+ *
34
+ * ```js
35
+ * const existingArray = [1, 2, 3];
36
+ * const result = array_fill_keys(existingArray, [1, 2], 'b');
37
+ * console.log(result); // [1, 'b', 'b']
38
+ * ```
39
+ *
40
+ * 3. Заполнение ассоциативного массива значениями по ключам:
41
+ *
42
+ * ```js
43
+ * const assocArray = { a: 1, b: 2 };
44
+ * const result = array_fill_keys(assocArray, ['c', 'd'], 'c');
45
+ * console.log(result); // { a: 1, b: 2, c: 'c', d: 'c' }
46
+ * ```
47
+ *
48
+ * 4. Обработка значений, не являющихся массивами:
49
+ *
50
+ * ```js
51
+ * try {
52
+ * const result = array_fill_keys('not an array', [0, 1, 2], 'd');
53
+ * } catch (e) {
54
+ * console.error(e.message); // Параметр "arr" должен быть массивом.
55
+ * }
56
+ * ```
57
+ *
58
+ * 5. Обработка значений, не являющихся списками:
59
+ *
60
+ * ```js
61
+ * try {
62
+ * const result = array_fill_keys([], 'not a list', 'e');
63
+ * } catch (e) {
64
+ * console.error(e.message); // Параметр "keys" должен быть списком.
65
+ * }
66
+ * ```
67
+ *
68
+ * @param {object} arr Исходный массив.
69
+ * @param {array} keys Массив ключей, по которым будет происходить заполнение.
70
+ * @param {any} value Значение, которым будет заполнен массив.
71
+ * @returns {object} Возвращает массив, содержащий элементы, заполненные указанным значением по указанным ключам.
72
+ * @throws {TypeError} Если параметры не являются массивами или списками.
73
+ */
74
+ export default function array_fill_keys(arr, keys, value) {
75
+ if (!is_array(arr)) {
76
+ throw new TypeError('Параметр "arr" должен быть массивом.');
77
+ }
78
+
79
+ if (!is_list(keys)) {
80
+ throw new TypeError('Параметр "keys" должен быть списком.');
81
+ }
82
+
83
+ const result = is_list(arr) ? Array.from(arr) : array(arr);
84
+
85
+ for (const key of keys) {
86
+ result[key] = value;
87
+ }
88
+
89
+ return result;
90
+ }
@@ -0,0 +1,105 @@
1
+ import array from '../array.mjs';
2
+ import empty from '../empty.mjs';
3
+ import is_array from '../is_array.mjs';
4
+ import is_function from '../is_function.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_filter` используется для фильтрации элементов массива с использованием функции обратного вызова.
14
+ * Она возвращает новый массив, содержащий только те элементы, для которых функция обратного вызова вернула `true`.
15
+ * Если функция обратного вызова не предоставлена, используется функция по умолчанию, которая удаляет пустые значения.
16
+ *
17
+ * ### Параметры
18
+ *
19
+ * - `value` (array): Исходный массив.
20
+ * - `callback` (function|null): Функция обратного вызова для фильтрации элементов. Если не указана, используется функция по умолчанию, которая удаляет пустые значения.
21
+ *
22
+ * ### Возвращаемое значение
23
+ *
24
+ * Возвращает новый массив, содержащий только те элементы, для которых функция обратного вызова вернула `true`.
25
+ *
26
+ * ### Примеры использования
27
+ *
28
+ * 1. Фильтрация массива с использованием функции обратного вызова:
29
+ *
30
+ * ```js
31
+ * const array = [1, 2, 3, 4, 5];
32
+ * const callback = (value) => value > 2;
33
+ * const result = array_filter(array, callback);
34
+ * console.log(result); // [3, 4, 5]
35
+ * ```
36
+ *
37
+ * 2. Фильтрация массива без функции обратного вызова (удаление пустых значений):
38
+ *
39
+ * ```js
40
+ * const array = [0, 1, false, 2, '', 3];
41
+ * const result = array_filter(array);
42
+ * console.log(result); // [1, 2, 3]
43
+ * ```
44
+ *
45
+ * 3. Фильтрация ассоциативного массива с использованием функции обратного вызова:
46
+ *
47
+ * ```js
48
+ * const array = { a: 1, b: 2, c: 3, d: 4 };
49
+ * const callback = (value, key) => value > 2;
50
+ * const result = array_filter(array, callback);
51
+ * console.log(result); // { c: 3, d: 4 }
52
+ * ```
53
+ *
54
+ * 4. Обработка значений, не являющихся массивами:
55
+ *
56
+ * ```js
57
+ * try {
58
+ * const result = array_filter('not an array');
59
+ * } catch (e) {
60
+ * console.error(e.message); // Параметр "value" должен быть массивом.
61
+ * }
62
+ * ```
63
+ *
64
+ * 5. Обработка значений, не являющихся функциями:
65
+ *
66
+ * ```js
67
+ * try {
68
+ * const result = array_filter([1, 2, 3], 'not a function');
69
+ * } catch (e) {
70
+ * console.error(e.message); // Параметр "callback" должен быть функцией.
71
+ * }
72
+ * ```
73
+ *
74
+ * @param {object} value Исходный массив.
75
+ * @param {function|null} callback Функция обратного вызова для фильтрации элементов. Если не указана, используется функция по умолчанию, которая удаляет пустые значения.
76
+ * @returns {object} Возвращает новый массив, содержащий только те элементы, для которых функция обратного вызова вернула `true`.
77
+ * @throws {TypeError} Если параметры не являются массивами или функциями.
78
+ */
79
+ export default function array_filter(value, callback = null) {
80
+ if (!is_array(value)) {
81
+ throw new TypeError('Параметр "value" должен быть массивом.');
82
+ }
83
+
84
+ if (!is_function(callback) && !is_null(callback)) {
85
+ throw new TypeError('Параметр "callback" должен быть функцией.');
86
+ }
87
+
88
+ if (is_null(callback)) {
89
+ callback = (v) => !empty(v);
90
+ }
91
+
92
+ if (is_list(value)) {
93
+ return value.filter(callback);
94
+ }
95
+
96
+ const result = array({});
97
+
98
+ for (const [k, v] of Object.entries(value)) {
99
+ if (callback(v, k)) {
100
+ result[k] = v;
101
+ }
102
+ }
103
+
104
+ return result;
105
+ }
@@ -0,0 +1,58 @@
1
+ import is_array from '../is_array.mjs';
2
+ import array_combine from './array_combine.mjs';
3
+
4
+ /**
5
+ * Меняет местами ключи и значения в массиве.
6
+ *
7
+ * ### Описание
8
+ *
9
+ * Функция `array_flip` используется для обмена местами ключей и значений в массиве.
10
+ * Она возвращает новый массив, в котором ключи и значения поменяны местами.
11
+ *
12
+ * ### Параметры
13
+ *
14
+ * - `value` (object): Исходный массив.
15
+ *
16
+ * ### Возвращаемое значение
17
+ *
18
+ * Возвращает новый массив, в котором ключи и значения поменяны местами.
19
+ *
20
+ * ### Примеры использования
21
+ *
22
+ * 1. Обмен ключей и значений в обычном массиве:
23
+ *
24
+ * ```js
25
+ * const array = { a: 1, b: 2, c: 3 };
26
+ * const result = array_flip(array);
27
+ * console.log(result); // { 1: 'a', 2: 'b', 3: 'c' }
28
+ * ```
29
+ *
30
+ * 2. Обработка пустого массива:
31
+ *
32
+ * ```js
33
+ * const array = {};
34
+ * const result = array_flip(array);
35
+ * console.log(result); // {}
36
+ * ```
37
+ *
38
+ * 3. Обработка значений, не являющихся массивами:
39
+ *
40
+ * ```js
41
+ * try {
42
+ * const result = array_flip('not an array');
43
+ * } catch (e) {
44
+ * console.error(e.message); // Параметр "value" должен быть массивом.
45
+ * }
46
+ * ```
47
+ *
48
+ * @param {object} value Исходный массив.
49
+ * @returns {object} Возвращает новый массив, в котором ключи и значения поменяны местами.
50
+ * @throws {TypeError} Если параметр не является массивом.
51
+ */
52
+ export default function array_flip(value) {
53
+ if (!is_array(value)) {
54
+ throw new TypeError('Параметр "value" должен быть массивом.');
55
+ }
56
+
57
+ return array_combine(Object.values(value), Object.keys(value));
58
+ }
@@ -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 is_nan from '../is_nan.mjs';
5
+
6
+ /**
7
+ * Возвращает максимальный индекс массива.
8
+ *
9
+ * ### Описание
10
+ *
11
+ * Функция `array_index_max` используется для получения максимального индекса массива.
12
+ * Она возвращает максимальный индекс для обычных массивов и ассоциативных массивов.
13
+ *
14
+ * ### Параметры
15
+ *
16
+ * - `value` (array): Исходный массив.
17
+ *
18
+ * ### Возвращаемое значение
19
+ *
20
+ * Возвращает максимальный индекс массива. Если массив пустой, возвращает `null`.
21
+ *
22
+ * ### Примеры использования
23
+ *
24
+ * 1. Получение максимального индекса обычного массива:
25
+ *
26
+ * ```js
27
+ * const array = [1, 2, 3];
28
+ * const result = array_index_max(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_index_max(array);
37
+ * console.log(result); // null (нет числовых ключей)
38
+ * ```
39
+ *
40
+ * 3. Обработка пустого массива:
41
+ *
42
+ * ```js
43
+ * const array = [];
44
+ * const result = array_index_max(array);
45
+ * console.log(result); // null
46
+ * ```
47
+ *
48
+ * 4. Обработка значений, не являющихся массивами:
49
+ *
50
+ * ```js
51
+ * try {
52
+ * const result = array_index_max('not an array');
53
+ * } catch (e) {
54
+ * console.error(e.message); // Параметр "value" должен быть массивом.
55
+ * }
56
+ * ```
57
+ *
58
+ * @param {object} value Исходный массив.
59
+ * @returns {number|null} Возвращает максимальный индекс массива. Если массив пустой, возвращает `null`.
60
+ * @throws {TypeError} Если параметр не является массивом.
61
+ */
62
+ export default function array_index_max(value) {
63
+ if (!is_array(value)) {
64
+ throw new TypeError('Параметр "value" должен быть массивом.');
65
+ }
66
+
67
+ if (empty(value)) {
68
+ return null;
69
+ }
70
+
71
+ if (is_list(value)) {
72
+ return value.length - 1;
73
+ }
74
+
75
+ for (const key of Object.keys(value).reverse()) {
76
+ if (!is_nan(Number(key))) {
77
+ return Number(key);
78
+ }
79
+ }
80
+
81
+ return null;
82
+ }