@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,104 @@
1
+ import is_array from '../is_array.mjs';
2
+ import is_bool from '../is_bool.mjs';
3
+ import is_function from '../is_function.mjs';
4
+ import is_int from '../is_int.mjs';
5
+
6
+ /**
7
+ * Ищет значение в массиве и возвращает ключ первого найденного элемента.
8
+ *
9
+ * ### Описание
10
+ *
11
+ * Функция `array_search` используется для поиска значения в массиве и возвращает ключ первого найденного элемента.
12
+ * Она поддерживает как обычные массивы, так и ассоциативные массивы (объекты с ключами и значениями).
13
+ * Функция может работать в строгом режиме, сравнивая значения с учетом типа.
14
+ * Также можно передать функцию для поиска, которая будет применяться к каждому элементу массива.
15
+ *
16
+ * ### Параметры
17
+ *
18
+ * - `arr` (object): Исходный массив.
19
+ * - `value` (any): Значение для поиска или функция для поиска.
20
+ * - `strict` (boolean): Флаг строгого сравнения. По умолчанию `false`.
21
+ *
22
+ * ### Возвращаемое значение
23
+ *
24
+ * Возвращает ключ первого найденного элемента. Если значение не найдено, возвращает `null`.
25
+ *
26
+ * ### Примеры использования
27
+ *
28
+ * 1. Поиск значения в обычном массиве:
29
+ *
30
+ * ```js
31
+ * const array = [1, 2, 3, 4, 5];
32
+ * const result = array_search(array, 3);
33
+ * console.log(result); // 2
34
+ * ```
35
+ *
36
+ * 2. Поиск значения в ассоциативном массиве:
37
+ *
38
+ * ```js
39
+ * const array = { a: 1, b: 2, c: 3 };
40
+ * const result = array_search(array, 2);
41
+ * console.log(result); // 'b'
42
+ * ```
43
+ *
44
+ * 3. Поиск значения с использованием строгого сравнения:
45
+ *
46
+ * ```js
47
+ * const array = [1, '2', 3];
48
+ * const result = array_search(array, 2, true);
49
+ * console.log(result); // null
50
+ * ```
51
+ *
52
+ * 4. Поиск значения с использованием функции:
53
+ *
54
+ * ```js
55
+ * const array = [1, 2, 3, 4, 5];
56
+ * const result = array_search(array, (v) => v > 3);
57
+ * console.log(result); // 3
58
+ * ```
59
+ *
60
+ * 5. Обработка значений, не являющихся массивами:
61
+ *
62
+ * ```js
63
+ * try {
64
+ * const result = array_search('not an array', 1);
65
+ * } catch (e) {
66
+ * console.error(e.message); // Параметр "arr" должен быть массивом.
67
+ * }
68
+ * ```
69
+ *
70
+ * @param {object} arr Исходный массив.
71
+ * @param {any} value Значение для поиска или функция для поиска.
72
+ * @param {boolean} [strict=false] Флаг строгого сравнения.
73
+ * @returns {any} Возвращает ключ первого найденного элемента. Если значение не найдено, возвращает `null`.
74
+ * @throws {TypeError} Если параметр не является массивом или если параметр strict не является логическим значением.
75
+ */
76
+ export default function array_search(arr, value, strict = false) {
77
+ if (!is_array(arr)) {
78
+ throw new TypeError('Параметр "arr" должен быть массивом.');
79
+ }
80
+
81
+ if (!is_bool(strict)) {
82
+ throw new TypeError('Параметр "strict" должен иметь логический тип.');
83
+ }
84
+
85
+ if (is_function(value)) {
86
+ for (const [k, v] of Object.entries(arr)) {
87
+ if (value(v)) {
88
+ return is_int(Number(k)) ? Number(k) : k;
89
+ }
90
+ }
91
+
92
+ return null;
93
+ }
94
+
95
+ const compare_func = strict ? (v) => Object.is(v, value) : (v) => v == value;
96
+
97
+ for (const [k, v] of Object.entries(arr)) {
98
+ if (compare_func(v)) {
99
+ return is_int(Number(k)) ? Number(k) : k;
100
+ }
101
+ }
102
+
103
+ return null;
104
+ }
@@ -0,0 +1,78 @@
1
+ import is_array from '../is_array.mjs';
2
+ import is_list from '../is_list.mjs';
3
+
4
+ /**
5
+ * Удаляет и возвращает первый элемент массива.
6
+ *
7
+ * ### Описание
8
+ *
9
+ * Функция `array_shift` используется для удаления и возврата первого элемента массива.
10
+ * Она поддерживает как обычные массивы, так и ассоциативные массивы (объекты с ключами и значениями).
11
+ *
12
+ * ### Параметры
13
+ *
14
+ * - `arr` (object): Исходный массив.
15
+ *
16
+ * ### Возвращаемое значение
17
+ *
18
+ * Возвращает первый элемент массива. Если массив пустой, возвращает `null`.
19
+ *
20
+ * ### Примеры использования
21
+ *
22
+ * 1. Удаление и возврат первого элемента обычного массива:
23
+ *
24
+ * ```js
25
+ * const array = [1, 2, 3];
26
+ * const result = array_shift(array);
27
+ * console.log(result); // 1
28
+ * console.log(array); // [2, 3]
29
+ * ```
30
+ *
31
+ * 2. Удаление и возврат первого элемента ассоциативного массива:
32
+ *
33
+ * ```js
34
+ * const array = { a: 1, b: 2, c: 3 };
35
+ * const result = array_shift(array);
36
+ * console.log(result); // 1
37
+ * console.log(array); // { b: 2, c: 3 }
38
+ * ```
39
+ *
40
+ * 3. Обработка пустого массива:
41
+ *
42
+ * ```js
43
+ * const array = [];
44
+ * const result = array_shift(array);
45
+ * console.log(result); // null
46
+ * ```
47
+ *
48
+ * 4. Обработка значений, не являющихся массивами:
49
+ *
50
+ * ```js
51
+ * try {
52
+ * const result = array_shift('not an array');
53
+ * } catch (e) {
54
+ * console.error(e.message); // Параметр "arr" должен быть массивом.
55
+ * }
56
+ * ```
57
+ *
58
+ * @param {object} arr Исходный массив.
59
+ * @returns {any} Возвращает первый элемент массива. Если массив пустой, возвращает `null`.
60
+ * @throws {TypeError} Если параметр не является массивом.
61
+ */
62
+ export default function array_shift(arr) {
63
+ if (!is_array(arr)) {
64
+ throw new TypeError('Параметр "arr" должен быть массивом.');
65
+ }
66
+
67
+ if (is_list(arr)) {
68
+ return arr.shift() ?? null;
69
+ }
70
+
71
+ for (const [k, v] of Object.entries(arr)) {
72
+ delete arr[k];
73
+
74
+ return v;
75
+ }
76
+
77
+ return null;
78
+ }
@@ -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
+ }