Skip to content

Commit bf61c4a

Browse files
Merge pull request #62 from sandstreamdev/add_object_some_and_every_to_keep_array_parity
Add object some and every functions to keep array parity
2 parents e6eb300 + 77b3ff9 commit bf61c4a

File tree

14 files changed

+269
-0
lines changed

14 files changed

+269
-0
lines changed

README.md

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2026,6 +2026,32 @@ Checks if two objects are deeply equal.
20262026
```
20272027
<!-- prettier-ignore-end -->
20282028
2029+
#### some
2030+
2031+
Test if every element passes the given predicate.
2032+
2033+
##### Type signature
2034+
2035+
<!-- prettier-ignore-start -->
2036+
```typescript
2037+
(
2038+
f: (value: any, key: string, context: object) => boolean
2039+
) => (xs: object) => boolean
2040+
```
2041+
<!-- prettier-ignore-end -->
2042+
2043+
##### Examples
2044+
2045+
<!-- prettier-ignore-start -->
2046+
```javascript
2047+
every(x => x >= 0)({ x: 5, y: 3, z: 0 }); // ⇒ true
2048+
```
2049+
2050+
```javascript
2051+
every(x => x > 0)({ x: 5, y: 3, z: 0 }); // ⇒ false
2052+
```
2053+
<!-- prettier-ignore-end -->
2054+
20292055
#### filter
20302056
20312057
Filters the given object with the given predicate.
@@ -2271,6 +2297,32 @@ Checks if the given object is empty.
22712297
```
22722298
<!-- prettier-ignore-end -->
22732299
2300+
#### some
2301+
2302+
Test if any element passes the given predicate.
2303+
2304+
##### Type signature
2305+
2306+
<!-- prettier-ignore-start -->
2307+
```typescript
2308+
(
2309+
f: (value: any, key: string, context: object) => boolean
2310+
) => (xs: object) => boolean
2311+
```
2312+
<!-- prettier-ignore-end -->
2313+
2314+
##### Examples
2315+
2316+
<!-- prettier-ignore-start -->
2317+
```javascript
2318+
some(x => x >= 4)({ x: 5, y: 3, z: 0 }); // ⇒ true
2319+
```
2320+
2321+
```javascript
2322+
some(x => x < 0)({ x: 5, y: 3, z: 0 }); // ⇒ false
2323+
```
2324+
<!-- prettier-ignore-end -->
2325+
22742326
#### sort
22752327
22762328
Sorts the given object by a comparator.

object/README.md

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,32 @@ Checks if two objects are deeply equal.
9898
```
9999
<!-- prettier-ignore-end -->
100100
101+
# some
102+
103+
Test if every element passes the given predicate.
104+
105+
## Type signature
106+
107+
<!-- prettier-ignore-start -->
108+
```typescript
109+
(
110+
f: (value: any, key: string, context: object) => boolean
111+
) => (xs: object) => boolean
112+
```
113+
<!-- prettier-ignore-end -->
114+
115+
## Examples
116+
117+
<!-- prettier-ignore-start -->
118+
```javascript
119+
every(x => x >= 0)({ x: 5, y: 3, z: 0 }); // ⇒ true
120+
```
121+
122+
```javascript
123+
every(x => x > 0)({ x: 5, y: 3, z: 0 }); // ⇒ false
124+
```
125+
<!-- prettier-ignore-end -->
126+
101127
# filter
102128
103129
Filters the given object with the given predicate.
@@ -343,6 +369,32 @@ Checks if the given object is empty.
343369
```
344370
<!-- prettier-ignore-end -->
345371
372+
# some
373+
374+
Test if any element passes the given predicate.
375+
376+
## Type signature
377+
378+
<!-- prettier-ignore-start -->
379+
```typescript
380+
(
381+
f: (value: any, key: string, context: object) => boolean
382+
) => (xs: object) => boolean
383+
```
384+
<!-- prettier-ignore-end -->
385+
386+
## Examples
387+
388+
<!-- prettier-ignore-start -->
389+
```javascript
390+
some(x => x >= 4)({ x: 5, y: 3, z: 0 }); // ⇒ true
391+
```
392+
393+
```javascript
394+
some(x => x < 0)({ x: 5, y: 3, z: 0 }); // ⇒ false
395+
```
396+
<!-- prettier-ignore-end -->
397+
346398
# sort
347399
348400
Sorts the given object by a comparator.

object/every.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import entries from "./entries.js";
2+
3+
export default f => xs =>
4+
entries(xs).every(([key, value]) => f(value, key, xs));

object/every.json

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"name": "some",
3+
"description": "Test if every element passes the given predicate.",
4+
"signature": "(\n f: (value: any, key: string, context: object) => boolean\n) => (xs: object) => boolean",
5+
"examples": [
6+
{
7+
"language": "javascript",
8+
"content": "every(x => x >= 0)({ x: 5, y: 3, z: 0 }); // ⇒ true"
9+
},
10+
{
11+
"language": "javascript",
12+
"content": "every(x => x > 0)({ x: 5, y: 3, z: 0 }); // ⇒ false"
13+
}
14+
],
15+
"questions": ["TODO: List questions that may this function answers."]
16+
}

object/every.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# some
2+
3+
Test if every element passes the given predicate.
4+
5+
## Type signature
6+
7+
<!-- prettier-ignore-start -->
8+
```typescript
9+
(
10+
f: (value: any, key: string, context: object) => boolean
11+
) => (xs: object) => boolean
12+
```
13+
<!-- prettier-ignore-end -->
14+
15+
## Examples
16+
17+
<!-- prettier-ignore-start -->
18+
```javascript
19+
every(x => x >= 0)({ x: 5, y: 3, z: 0 }); // ⇒ true
20+
```
21+
22+
```javascript
23+
every(x => x > 0)({ x: 5, y: 3, z: 0 }); // ⇒ false
24+
```
25+
<!-- prettier-ignore-end -->

object/every.test.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/* eslint-env jest */
2+
// @ts-ignore ambiguous import
3+
import every from "./every.ts";
4+
5+
describe("every", () => {
6+
it("test if every element passes the given predicate", () => {
7+
const adult = ({ age }: { age: number }) => age >= 18;
8+
9+
expect(
10+
every(adult)({
11+
tom: { age: 25 },
12+
john: { age: 16 },
13+
alice: { age: 18 }
14+
})
15+
).toBe(false);
16+
});
17+
18+
it("test if every element passes the given predicate", () => {
19+
expect(
20+
every((x: number) => x >= 0)({
21+
x: 5,
22+
y: 3,
23+
z: 0
24+
})
25+
).toBe(true);
26+
});
27+
});

object/every.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import entries from "./entries";
2+
3+
export default (f: (value: any, key: string, context: object) => boolean) => (
4+
xs: object
5+
): boolean => entries(xs).every(([key, value]) => f(value, key, xs));

object/index.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import empty from "./empty.js";
44
import entries from "./entries.js";
55
import enumerable from "./enumerable.js";
66
import equals from "./equals.js";
7+
import every from "./every.js";
78
import filter from "./filter.js";
89
import find from "./find.js";
910
import findEntry from "./findEntry.js";
@@ -20,6 +21,7 @@ import mapKeys from "./mapKeys.js";
2021
import mapValues from "./mapValues.js";
2122
import merge from "./merge.js";
2223
import none from "./none.js";
24+
import some from "./some.js";
2325
import sort from "./sort.js";
2426

2527
export {
@@ -29,6 +31,7 @@ export {
2931
entries,
3032
enumerable,
3133
equals,
34+
every,
3235
filter,
3336
find,
3437
findEntry,
@@ -45,6 +48,7 @@ export {
4548
mapValues,
4649
merge,
4750
none,
51+
some,
4852
sort
4953
};
5054

@@ -55,6 +59,7 @@ export default {
5559
entries,
5660
enumerable,
5761
equals,
62+
every,
5863
filter,
5964
find,
6065
findEntry,
@@ -71,5 +76,6 @@ export default {
7176
mapValues,
7277
merge,
7378
none,
79+
some,
7480
sort
7581
};

object/index.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import empty from "./empty";
44
import entries from "./entries";
55
import enumerable from "./enumerable";
66
import equals from "./equals";
7+
import every from "./every";
78
import filter from "./filter";
89
import find from "./find";
910
import findEntry from "./findEntry";
@@ -20,6 +21,7 @@ import mapKeys from "./mapKeys";
2021
import mapValues from "./mapValues";
2122
import merge from "./merge";
2223
import none from "./none";
24+
import some from "./some";
2325
import sort from "./sort";
2426

2527
export {
@@ -29,6 +31,7 @@ export {
2931
entries,
3032
enumerable,
3133
equals,
34+
every,
3235
filter,
3336
find,
3437
findEntry,
@@ -45,6 +48,7 @@ export {
4548
mapValues,
4649
merge,
4750
none,
51+
some,
4852
sort
4953
};
5054

@@ -55,6 +59,7 @@ export default {
5559
entries,
5660
enumerable,
5761
equals,
62+
every,
5863
filter,
5964
find,
6065
findEntry,
@@ -71,5 +76,6 @@ export default {
7176
mapValues,
7277
merge,
7378
none,
79+
some,
7480
sort
7581
};

object/some.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import entries from "./entries.js";
2+
3+
export default f => xs => entries(xs).some(([key, value]) => f(value, key, xs));

0 commit comments

Comments
 (0)