jaaJSU - v2.0.0 / $object
This NAMESPACE provides features for Objects.
Version
2.0.0
- assignDescriptor
- each
- eachDynamic
- fromArray
- hasProp
- immutable_keys
- method
- methodFrom
- pluck
- pluckFrom
- setter
- setterFrom
▸ each<A
, B
, C
>(iterable
, callback
, scope
): C
Procedure for iterating throught Object iterable
.
Name | Type |
---|---|
A |
extends unknown |
B |
B |
C |
C |
Name | Type | Description |
---|---|---|
iterable |
A [] |
An array-like object for iterating. |
callback |
IterableCallback <A , B , C > |
- |
scope |
B |
- |
C
▸ eachDynamic<A
, B
, C
>(iterable
, callback
, scope
): C
Procedure for iterating throught Object iterable
like each, but use for(... in ...)...if(Object.prototype.hasOwnProperty...
.
Name | Type |
---|---|
A |
extends unknown |
B |
B |
C |
C |
Name | Type | Description |
---|---|---|
iterable |
A [] |
An array-like object for iterating. |
callback |
IterableCallback <A , B , C > |
- |
scope |
B |
- |
C
▸ fromArray<T
>(arr
): Record
<keyof T
, T
>
Function for converting Array arr
to Object.
Name | Type |
---|---|
T |
extends any [] |
Name | Type |
---|---|
arr |
T |
Record
<keyof T
, T
>
▸ fromArray<OUT
, A
, B
>(arr
, fun
, default_value
): OUT
Function for converting Array arr
to Object. Uses fun
for converting.
Reduce-like syntax: (input_array, reduce_function, reduce_initial)
Name | Type |
---|---|
OUT |
extends unknown |
A |
extends unknown |
B |
extends unknown |
Name | Type |
---|---|
arr |
[A , B ][] |
fun |
(acc : OUT , curr : B , i : A ) => OUT |
default_value |
OUT |
OUT
▸ hasProp<O
>(obj
, prop
): boolean
Wrapper around Object.prototype.hasOwnProperty
. It is more trustable, because you can sets var obj= { hasOwnProperty: "gotcha" }
Name | Type |
---|---|
O |
extends Object |
Name | Type |
---|---|
obj |
O |
prop |
keyof O |
boolean
▸ hasProp(obj
, prop
): boolean
Name | Type |
---|---|
obj |
Object |
prop |
PropertyKey |
boolean
▸ immutable_keys(obj_input?
): ObjectImutable
Function for creating non-rewritable object
Name | Type |
---|---|
obj_input? |
Object |
▸ method<O
, M
, P
>(name
, ...args
): (input
: O
) => O
[M
] extends (...a
: P
) => infer OUT ? OUT
: never
Wrapper around object[methodName](...args)
.
$object.method("trim")(" Hi ");//= `Hi`
$object.method("split", " ")("Hello world");//= `[ "Hello", "world" ]`
Name | Type |
---|---|
O |
extends String |
M |
extends string | number | symbol |
P |
extends any [] |
Name | Type |
---|---|
name |
M |
...args |
P |
fn
▸ (input
): O
[M
] extends (...a
: P
) => infer OUT ? OUT
: never
Name | Type |
---|---|
input |
O |
O
[M
] extends (...a
: P
) => infer OUT ? OUT
: never
▸ method<O
, M
, P
>(name
, ...args
): (input
: O
) => O
[M
] extends (...a
: P
) => infer OUT ? OUT
: never
Name | Type |
---|---|
O |
extends any [] |
M |
extends string | number | symbol |
P |
extends any [] |
Name | Type |
---|---|
name |
M |
...args |
P |
fn
▸ (input
): O
[M
] extends (...a
: P
) => infer OUT ? OUT
: never
Name | Type |
---|---|
input |
O |
O
[M
] extends (...a
: P
) => infer OUT ? OUT
: never
▸ method<O
, M
, P
>(name
, ...args
): (input
: O
) => O
[M
] extends (...a
: P
) => infer OUT ? OUT
: never
Name | Type |
---|---|
O |
extends Number |
M |
extends string | number | symbol |
P |
extends any [] |
Name | Type |
---|---|
name |
M |
...args |
P |
fn
▸ (input
): O
[M
] extends (...a
: P
) => infer OUT ? OUT
: never
Name | Type |
---|---|
input |
O |
O
[M
] extends (...a
: P
) => infer OUT ? OUT
: never
▸ method<O
, M
, P
>(name
, ...args
): (input
: O
) => O
[M
] extends (...a
: P
) => infer OUT ? OUT
: never
Name | Type |
---|---|
O |
extends Object |
M |
extends string | number | symbol |
P |
extends any [] |
Name | Type |
---|---|
name |
M |
...args |
P |
fn
▸ (input
): O
[M
] extends (...a
: P
) => infer OUT ? OUT
: never
Name | Type |
---|---|
input |
O |
O
[M
] extends (...a
: P
) => infer OUT ? OUT
: never
▸ methodFrom<O
, M
, P
>(object
): (methodName
: M
) => O
[M
] extends (...a
: P
) => infer OUT ? (...a
: P
) => OUT
: never
$object.methodFrom(" Hi ")("trim")()====$object.method("trim")(" Hi ");
$object.methodFrom("Hello world")("split")(" ")===$object.method("split", " ")("Hello world");
Name | Type |
---|---|
O |
O |
M |
extends string | number | symbol |
P |
extends any [] |
Name | Type |
---|---|
object |
O |
fn
▸ (methodName
): O
[M
] extends (...a
: P
) => infer OUT ? (...a
: P
) => OUT
: never
Name | Type |
---|---|
methodName |
M |
O
[M
] extends (...a
: P
) => infer OUT ? (...a
: P
) => OUT
: never
▸ pluck<IN
, K
>(name
): (obj
: IN
) => IN
[K
]
Wrapper around object[key]
, usefull for binding.
$object.pluck("length")("Test");//= `4`
Name | Type |
---|---|
IN |
extends String |
K |
extends string | number | symbol |
Name | Type |
---|---|
name |
K |
fn
▸ (obj
): IN
[K
]
Name | Type |
---|---|
obj |
IN |
IN
[K
]
▸ pluck<IN
, K
>(name
): (obj
: IN
) => IN
[K
]
Name | Type |
---|---|
IN |
extends any [] |
K |
extends string | number | symbol |
Name | Type |
---|---|
name |
K |
fn
▸ (obj
): IN
[K
]
Name | Type |
---|---|
obj |
IN |
IN
[K
]
▸ pluck<IN
, K
>(name
): (obj
: IN
) => IN
[K
]
Name | Type |
---|---|
IN |
extends Number |
K |
extends string | number | symbol |
Name | Type |
---|---|
name |
K |
fn
▸ (obj
): IN
[K
]
Name | Type |
---|---|
obj |
IN |
IN
[K
]
▸ pluck<IN
, K
>(name
): (obj
: IN
) => IN
[K
]
Name | Type |
---|---|
IN |
extends Object |
K |
extends string | number | symbol |
Name | Type |
---|---|
name |
K |
fn
▸ (obj
): IN
[K
]
Name | Type |
---|---|
obj |
IN |
IN
[K
]
▸ pluckFrom<O
, K
>(obj
): (key
: K
) => O
[K
]
$object.pluckFrom("Test")("length")===$object.pluck("length")("Test");
Name | Type |
---|---|
O |
extends Object |
K |
extends string | number | symbol |
Name | Type |
---|---|
obj |
O |
fn
▸ (key
): O
[K
]
Name | Type |
---|---|
key |
K |
O
[K
]
▸ setter<O
, K
>(key
): (obj
: O
) => (value
: O
[K
]) => O
[K
]
Wrapper around object[setterName]= arg
$object.setter("test_key", "test_value")({ test_key: "test_init_value", other_key: "other_value" });//= `{ test_key: "test_value", other_key: "other_value" }`
Name | Type |
---|---|
O |
extends Object |
K |
extends string | number | symbol |
Name | Type |
---|---|
key |
K |
fn
▸ (obj
): (value
: O
[K
]) => O
[K
]
Name | Type |
---|---|
obj |
O |
fn
▸ (value
): O
[K
]
Name | Type |
---|---|
value |
O [K ] |
O
[K
]
▸ setter<O
, K
>(key
): (obj
: O
) => (value
: O
[K
]) => O
[K
]
Name | Type |
---|---|
O |
extends any [] |
K |
extends string | number | symbol |
Name | Type |
---|---|
key |
K |
fn
▸ (obj
): (value
: O
[K
]) => O
[K
]
Name | Type |
---|---|
obj |
O |
fn
▸ (value
): O
[K
]
Name | Type |
---|---|
value |
O [K ] |
O
[K
]
▸ setter<O
, K
>(key
): (obj
: O
) => (value
: O
[K
]) => O
[K
]
Name | Type |
---|---|
O |
extends Number |
K |
extends string | number | symbol |
Name | Type |
---|---|
key |
K |
fn
▸ (obj
): (value
: O
[K
]) => O
[K
]
Name | Type |
---|---|
obj |
O |
fn
▸ (value
): O
[K
]
Name | Type |
---|---|
value |
O [K ] |
O
[K
]
▸ setter<O
, K
>(key
): (obj
: O
) => (value
: O
[K
]) => O
[K
]
Name | Type |
---|---|
O |
extends String |
K |
extends string | number | symbol |
Name | Type |
---|---|
key |
K |
fn
▸ (obj
): (value
: O
[K
]) => O
[K
]
Name | Type |
---|---|
obj |
O |
fn
▸ (value
): O
[K
]
Name | Type |
---|---|
value |
O [K ] |
O
[K
]
▸ setterFrom<O
>(obj
): <K>(key
: K
) => (value
: O
[K
]) => O
[K
]
$object.setterFrom({ test_key: "test_init_value", other_key: "other_value" })("test_key")("test_value")===$object.setter("test_key", "test_value")({ test_key: "test_init_value", other_key: "other_value" });
Name | Type |
---|---|
O |
extends Object |
Name | Type |
---|---|
obj |
O |
fn
▸ <K
>(key
): (value
: O
[K
]) => O
[K
]
Name | Type |
---|---|
K |
extends keyof O |
Name | Type |
---|---|
key |
K |
fn
▸ (value
): O
[K
]
Name | Type |
---|---|
value |
O [K ] |
O
[K
]
Ƭ ParametersOfMethod<A
, B
, P
>: B
extends keyof A
? A
[B
] extends (...i
: P
) => any
? P
: never
: never
Name | Type |
---|---|
A |
extends Object |
B |
B |
P |
extends any [] = any [] |
▸ assignDescriptor<T
, P
>(obj
, property
, descriptor
): T
Similar to Object.defineProperty, except that non-mentioned descriptors are keeped;
Example
let lea= {
name: "Lea Verou",
get id(){ return this.name.toLowerCase().replace(/\W+/g, "-"); }
};
$object.assignDescriptor(lea, "id", prop=> ({
set(value){ return Reflect.defineProperty(this, prop, { value }); },
enumerable: true
}));
console.log(lea);//= { name: "Lea Verou", id: "lea-verou" } … see https://lea.verou.me/2020/12/writable-getters/
Name | Type |
---|---|
T |
extends object |
P |
extends PropertyKey |
Name | Type |
---|---|
obj |
T |
property |
P |
descriptor |
PropertyDescriptor | (property : P ) => PropertyDescriptor & ThisType <any > |
T