Skip to content

Commit

Permalink
Make list and range functions more dynamic and robust (sodiray#152)
Browse files Browse the repository at this point in the history
* make list function more dynamic

* implement same dynamic behavior in range
  • Loading branch information
sodiray committed Dec 11, 2022
1 parent 068a544 commit 0a6216e
Show file tree
Hide file tree
Showing 5 changed files with 103 additions and 48 deletions.
15 changes: 9 additions & 6 deletions cdn/radash.esm.js
Original file line number Diff line number Diff line change
Expand Up @@ -199,15 +199,18 @@ const unique = (array, toKey) => {
}, {});
return Object.values(valueMap);
};
function* range(start, end, step = 1) {
for (let i = start; i <= end; i += step) {
yield i;
if (i + step > end)
function* range(startOrLength, end, valueOrMapper = (i) => i, step = 1) {
const mapper = isFunction(valueOrMapper) ? valueOrMapper : () => valueOrMapper;
const start = end ? startOrLength : 0;
const final = end ?? startOrLength;
for (let i = start; i <= final; i += step) {
yield mapper(i);
if (i + step > final)
break;
}
}
const list = (start, end, step = 1) => {
return Array.from(range(start, end, step));
const list = (startOrLength, end, valueOrMapper, step) => {
return Array.from(range(startOrLength, end, valueOrMapper, step));
};
const flat = (lists) => {
return lists.reduce((acc, list2) => {
Expand Down
15 changes: 9 additions & 6 deletions cdn/radash.js
Original file line number Diff line number Diff line change
Expand Up @@ -202,15 +202,18 @@ var radash = (function (exports) {
}, {});
return Object.values(valueMap);
};
function* range(start, end, step = 1) {
for (let i = start; i <= end; i += step) {
yield i;
if (i + step > end)
function* range(startOrLength, end, valueOrMapper = (i) => i, step = 1) {
const mapper = isFunction(valueOrMapper) ? valueOrMapper : () => valueOrMapper;
const start = end ? startOrLength : 0;
const final = end ?? startOrLength;
for (let i = start; i <= final; i += step) {
yield mapper(i);
if (i + step > final)
break;
}
}
const list = (start, end, step = 1) => {
return Array.from(range(start, end, step));
const list = (startOrLength, end, valueOrMapper, step) => {
return Array.from(range(startOrLength, end, valueOrMapper, step));
};
const flat = (lists) => {
return lists.reduce((acc, list2) => {
Expand Down
Loading

0 comments on commit 0a6216e

Please sign in to comment.