@dashkite/joy
Version:
[](https://firstdonoharm.dev/version/3/0/core.html)
123 lines (122 loc) • 19.2 kB
JavaScript
var cat, compact, dequeue, enqueue, fifth, fill, first, floor, fourth, insert, last, nth, pair, peek, pluck, poke, pop, push, random, range, remove, rest, round, second, shift, shuffle, slice, sort, splice, third, unshift, splice1 = [].splice;
import { curry, flip, compose, partial, _, identity, unary, binary, ternary, detach } from "./function";
import { equal } from "./value";
import * as Se from "./set";
nth = curry(function(i, ax) {
return ax[i - 1];
});
first = nth(1);
second = nth(2);
third = nth(3);
fourth = nth(4);
fifth = nth(5);
last = function(arg) {
var arg, last, rest;
[...rest] = arg, [last] = splice1.call(rest, -1);
return last;
};
rest = function([first, ...rest]) {
return rest;
};
// Array mutators
push = curry(function(a, ax) {
ax.push(a);
return ax;
});
pop = detach(Array.prototype.pop);
shift = detach(Array.prototype.shift);
unshift = curry(function(a, ax) {
ax.unshift(a);
return ax;
});
enqueue = unshift;
dequeue = pop;
// Add for completeness
peek = function(ax) {
return ax[ax.length - 1];
};
poke = function(a, ax) {
return ax[ax.length - 1] = a;
};
// true splice without weird insertion option
// or compose-breaking return value
splice = curry(function(i, n, ax) {
ax.splice(i, n);
return ax;
});
insert = curry(function(i, a, ax) {
ax.splice(i, 0, a);
return ax;
});
remove = curry(function(a, ax) {
var i;
if ((i = ax.indexOf(a)) !== -1) {
ax.splice(i, 1);
}
return ax;
});
cat = detach(Array.prototype.concat);
slice = curry(function(i, j, ax) {
return ax.slice(i, j);
});
fill = curry(function(a, ax) {
return ax.fill(a);
});
range = curry(function(start, finish) {
return (function() {
var results = [];
for(var k = start; start <= finish ? k <= finish : k >= finish; start <= finish ? k++ : k--){
results.push(k);
}
return results;
}).apply(this);
});
({ random, round } = Math);
pluck = function(ax) {
return ax[round(random() * (ax.length - 1))];
};
pair = curry(function(a, b) {
return [
a,
b
];
});
sort = curry(function(f, ax) {
return ax.toSorted(f, ax);
});
compact = curry(function(ax) {
return ax.filter(function(a) {
return a != null;
});
});
// https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle
({ floor, random } = Math);
shuffle = function(ax) {
var bx, i, j;
bx = [
...ax
];
i = bx.length;
if (!(i <= 1)) {
while(--i > 0){
// the distinguishing characteristic of fisher-yates is that the random
// value generated is bounded by the iterator index (Math.random() * i)
// instead of the size of the array (Math.random() * bx.length)
j = floor(random() * (i + 1));
[bx[i], bx[j]] = [
bx[j],
bx[i]
];
}
if (equal(ax, bx)) {
return shuffle(ax);
} else {
return bx;
}
} else {
return bx;
}
};
export { first, second, third, fourth, fifth, nth, last, rest, push, pop, shift, unshift, enqueue, dequeue, peek, poke, splice, insert, remove, cat, slice, fill, range, pluck, pair, sort, compact, shuffle }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiL0BkYXNoa2l0ZS9qb3kvc3JjL2FycmF5LmNvZmZlZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxJQUFBLEdBQUEsRUFBQSxPQUFBLEVBQUEsT0FBQSxFQUFBLE9BQUEsRUFBQSxLQUFBLEVBQUEsSUFBQSxFQUFBLEtBQUEsRUFBQSxLQUFBLEVBQUEsTUFBQSxFQUFBLE1BQUEsRUFBQSxJQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsRUFBQSxJQUFBLEVBQUEsS0FBQSxFQUFBLElBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxFQUFBLE1BQUEsRUFBQSxLQUFBLEVBQUEsTUFBQSxFQUFBLElBQUEsRUFBQSxLQUFBLEVBQUEsTUFBQSxFQUFBLEtBQUEsRUFBQSxPQUFBLEVBQUEsS0FBQSxFQUFBLElBQUEsRUFBQSxNQUFBLEVBQUEsS0FBQSxFQUFBLE9BQUE7RUFBQTs7QUFBQSxPQUFBO0VBQVEsS0FBUjtFQUFlLElBQWY7RUFBcUIsT0FBckI7RUFBOEIsT0FBOUI7RUFBdUMsQ0FBdkM7RUFBMEMsUUFBMUM7RUFDRSxLQURGO0VBQ1MsTUFEVDtFQUNpQixPQURqQjtFQUMwQixNQUQxQjtDQUFBLE1BQUE7O0FBRUEsT0FBQTtFQUFRLEtBQVI7Q0FBQSxNQUFBOztBQUNBLE9BQU8sQ0FBQSxNQUFQLE1BQUE7O0FBRUEsR0FBQSxHQUFNLEtBQUEsQ0FBTSxRQUFBLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FBQTtTQUFXLEVBQUUsQ0FBQyxDQUFBLEdBQUksQ0FBTDtBQUFiLENBQU47O0FBQ04sS0FBQSxHQUFTLEdBQUEsQ0FBSSxDQUFKOztBQUNULE1BQUEsR0FBUyxHQUFBLENBQUksQ0FBSjs7QUFDVCxLQUFBLEdBQVMsR0FBQSxDQUFJLENBQUo7O0FBQ1QsTUFBQSxHQUFTLEdBQUEsQ0FBSSxDQUFKOztBQUNULEtBQUEsR0FBUyxHQUFBLENBQUksQ0FBSjs7QUFDVCxJQUFBLEdBQU8sUUFBQSxDQUFDLEdBQUQs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QkUsTUFuQkY7RUFvQkUsR0FwQkY7RUFxQkUsS0FyQkY7RUFzQkUsSUF0QkY7RUF1QkUsS0F2QkY7RUF3QkUsS0F4QkY7RUF5QkUsSUF6QkY7RUEwQkUsSUExQkY7RUEyQkUsT0EzQkY7RUE0QkUsT0E1QkYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2N1cnJ5LCBmbGlwLCBjb21wb3NlLCBwYXJ0aWFsLCBfLCBpZGVudGl0eSxcbiAgdW5hcnksIGJpbmFyeSwgdGVybmFyeSwgZGV0YWNofSBmcm9tIFwiLi9mdW5jdGlvblwiXG5pbXBvcnQge2VxdWFsfSBmcm9tIFwiLi92YWx1ZVwiXG5pbXBvcnQgKiBhcyBTZSBmcm9tIFwiLi9zZXRcIlxuXG5udGggPSBjdXJyeSAoaSwgYXgpIC0+IGF4W2kgLSAxXVxuZmlyc3QgID0gbnRoIDFcbnNlY29uZCA9IG50aCAyXG50aGlyZCAgPSBudGggM1xuZm91cnRoID0gbnRoIDRcbmZpZnRoICA9IG50aCA1XG5sYXN0ID0gKFtyZXN0Li4uLCBsYXN0XSkgLT4gbGFzdFxucmVzdCA9IChbZmlyc3QsIHJlc3QuLi5dKSAtPiByZXN0XG5cbiMgQXJyYXkgbXV0YXRvcnNcbnB1c2ggPSBjdXJyeSAoYSwgYXgpIC0+IGF4LnB1c2ggYTsgYXhcbnBvcCA9IGRldGFjaCBBcnJheTo6cG9wXG5zaGlmdCA9IGRldGFjaCBBcnJheTo6c2hpZnRcbnVuc2hpZnQgPSBjdXJyeSAoYSwgYXgpIC0+IGF4LnVuc2hpZnQgYTsgYXhcbmVucXVldWUgPSB1bnNoaWZ0XG5kZXF1ZXVlID0gcG9wXG5cbiMgQWRkIGZvciBjb21wbGV0ZW5lc3NcbnBlZWsgPSAoIGF4ICkgLT4gYXhbIGF4Lmxlbmd0aCAtIDEgXVxucG9rZSA9ICggYSwgYXggKSAtPiBheFsgYXgubGVuZ3RoIC0gMSBdID0gYVxuXG4jIHRydWUgc3BsaWNlIHdpdGhvdXQgd2VpcmQgaW5zZXJ0aW9uIG9wdGlvblxuIyBvciBjb21wb3NlLWJyZWFraW5nIHJldHVybiB2YWx1ZVxuc3BsaWNlID0gY3VycnkgKGksIG4sIGF4KSAtPlxuICBheC5zcGxpY2UgaSwgblxuICBheFxuXG5pbnNlcnQgPSBjdXJyeSAoaSwgYSwgYXgpIC0+XG4gIGF4LnNwbGljZSBpLCAwLCBhXG4gIGF4XG5cbnJlbW92ZSA9IGN1cnJ5IChhLCBheCkgLT5cbiAgKGF4LnNwbGljZSBpLCAxKSBpZiAoaSA9IGF4LmluZGV4T2YoIGEgKSkgIT0gLTFcbiAgYXhcblxuY2F0ID0gZGV0YWNoIEFycmF5Ojpjb25jYXRcblxuc2xpY2UgPSBjdXJyeSAoaSwgaiwgYXgpIC0+IGF4W2kuLi5qXVxuXG5maWxsID0gY3VycnkgKGEsIGF4KSAtPiBheC5maWxsIGFcblxucmFuZ2UgPSBjdXJyeSAoc3RhcnQsIGZpbmlzaCkgLT4gW3N0YXJ0Li5maW5pc2hdXG5cbntyYW5kb20sIHJvdW5kfSA9IE1hdGhcbnBsdWNrID0gKGF4KSAtPiBheFsocm91bmQgcmFuZG9tKCkgKiAoYXgubGVuZ3RoIC0gMSkpXVxuXG5wYWlyID0gY3VycnkgKGEsIGIpIC0+IFthLCBiXVxuXG5zb3J0ID0gY3VycnkgKGYsIGF4KSAtPiBheC50b1NvcnRlZCBmLCBheFxuXG5jb21wYWN0ID0gY3VycnkgKCBheCApIC0+IGF4LmZpbHRlciAoIGEgKSAtPiBhP1xuXG5cbiMgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRmlzaGVyJUUyJTgwJTkzWWF0ZXNfc2h1ZmZsZVxuI1xueyBmbG9vciwgcmFuZG9tIH0gPSBNYXRoXG5zaHVmZmxlID0gKCBheCApIC0+XG4gIGJ4ID0gWyBheC4uLiBdXG4gIGkgPSBieC5sZW5ndGhcbiAgdW5sZXNzIGkgPD0gMVxuICAgIHdoaWxlIC0taSA+IDBcbiAgICAgICMgdGhlIGRpc3Rpbmd1aXNoaW5nIGNoYXJhY3RlcmlzdGljIG9mIGZpc2hlci15YXRlcyBpcyB0aGF0IHRoZSByYW5kb21cbiAgICAgICMgdmFsdWUgZ2VuZXJhdGVkIGlzIGJvdW5kZWQgYnkgdGhlIGl0ZXJhdG9yIGluZGV4IChNYXRoLnJhbmRvbSgpICogaSlcbiAgICAgICMgaW5zdGVhZCBvZiB0aGUgc2l6ZSBvZiB0aGUgYXJyYXkgKE1hdGgucmFuZG9tKCkgKiBieC5sZW5ndGgpXG4gICAgICBqID0gZmxvb3IgcmFuZG9tKCkgKiAoaSArIDEpXG4gICAgICBbYnhbaV0sIGJ4W2pdXSA9IFtieFtqXSwgYnhbaV1dXG4gICAgaWYgZXF1YWwgYXgsIGJ4IHRoZW4gc2h1ZmZsZSBheCBlbHNlIGJ4XG4gIGVsc2VcbiAgICBieFxuXG5leHBvcnQge1xuICBmaXJzdFxuICBzZWNvbmRcbiAgdGhpcmRcbiAgZm91cnRoXG4gIGZpZnRoXG4gIG50aFxuICBsYXN0XG4gIHJlc3RcbiAgcHVzaFxuICBwb3BcbiAgc2hpZnRcbiAgdW5zaGlmdFxuICBlbnF1ZXVlXG4gIGRlcXVldWVcbiAgcGVla1xuICBwb2tlXG4gIHNwbGljZVxuICBpbnNlcnRcbiAgcmVtb3ZlXG4gIGNhdFxuICBzbGljZVxuICBmaWxsXG4gIHJhbmdlXG4gIHBsdWNrXG4gIHBhaXJcbiAgc29ydFxuICBjb21wYWN0XG4gIHNodWZmbGVcbn1cbiJdfQ==
//# sourceURL=/@dashkite/joy/src/array.coffee
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlcyI6WyIvQGRhc2hraXRlL2pveS9zcmMvYXJyYXkuY29mZmVlIl0sInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2N1cnJ5LCBmbGlwLCBjb21wb3NlLCBwYXJ0aWFsLCBfLCBpZGVudGl0eSxcbiAgdW5hcnksIGJpbmFyeSwgdGVybmFyeSwgZGV0YWNofSBmcm9tIFwiLi9mdW5jdGlvblwiXG5pbXBvcnQge2VxdWFsfSBmcm9tIFwiLi92YWx1ZVwiXG5pbXBvcnQgKiBhcyBTZSBmcm9tIFwiLi9zZXRcIlxuXG5udGggPSBjdXJyeSAoaSwgYXgpIC0+IGF4W2kgLSAxXVxuZmlyc3QgID0gbnRoIDFcbnNlY29uZCA9IG50aCAyXG50aGlyZCAgPSBudGggM1xuZm91cnRoID0gbnRoIDRcbmZpZnRoICA9IG50aCA1XG5sYXN0ID0gKFtyZXN0Li4uLCBsYXN0XSkgLT4gbGFzdFxucmVzdCA9IChbZmlyc3QsIHJlc3QuLi5dKSAtPiByZXN0XG5cbiMgQXJyYXkgbXV0YXRvcnNcbnB1c2ggPSBjdXJyeSAoYSwgYXgpIC0+IGF4LnB1c2ggYTsgYXhcbnBvcCA9IGRldGFjaCBBcnJheTo6cG9wXG5zaGlmdCA9IGRldGFjaCBBcnJheTo6c2hpZnRcbnVuc2hpZnQgPSBjdXJyeSAoYSwgYXgpIC0+IGF4LnVuc2hpZnQgYTsgYXhcbmVucXVldWUgPSB1bnNoaWZ0XG5kZXF1ZXVlID0gcG9wXG5cbiMgQWRkIGZvciBjb21wbGV0ZW5lc3NcbnBlZWsgPSAoIGF4ICkgLT4gYXhbIGF4Lmxlbmd0aCAtIDEgXVxucG9rZSA9ICggYSwgYXggKSAtPiBheFsgYXgubGVuZ3RoIC0gMSBdID0gYVxuXG4jIHRydWUgc3BsaWNlIHdpdGhvdXQgd2VpcmQgaW5zZXJ0aW9uIG9wdGlvblxuIyBvciBjb21wb3NlLWJyZWFraW5nIHJldHVybiB2YWx1ZVxuc3BsaWNlID0gY3VycnkgKGksIG4sIGF4KSAtPlxuICBheC5zcGxpY2UgaSwgblxuICBheFxuXG5pbnNlcnQgPSBjdXJyeSAoaSwgYSwgYXgpIC0+XG4gIGF4LnNwbGljZSBpLCAwLCBhXG4gIGF4XG5cbnJlbW92ZSA9IGN1cnJ5IChhLCBheCkgLT5cbiAgKGF4LnNwbGljZSBpLCAxKSBpZiAoaSA9IGF4LmluZGV4T2YoIGEgKSkgIT0gLTFcbiAgYXhcblxuY2F0ID0gZGV0YWNoIEFycmF5Ojpjb25jYXRcblxuc2xpY2UgPSBjdXJyeSAoaSwgaiwgYXgpIC0+IGF4W2kuLi5qXVxuXG5maWxsID0gY3VycnkgKGEsIGF4KSAtPiBheC5maWxsIGFcblxucmFuZ2UgPSBjdXJyeSAoc3RhcnQsIGZpbmlzaCkgLT4gW3N0YXJ0Li5maW5pc2hdXG5cbntyYW5kb20sIHJvdW5kfSA9IE1hdGhcbnBsdWNrID0gKGF4KSAtPiBheFsocm91bmQgcmFuZG9tKCkgKiAoYXgubGVuZ3RoIC0gMSkpXVxuXG5wYWlyID0gY3VycnkgKGEsIGIpIC0+IFthLCBiXVxuXG5zb3J0ID0gY3VycnkgKGYsIGF4KSAtPiBheC50b1NvcnRlZCBmLCBheFxuXG5jb21wYWN0ID0gY3VycnkgKCBheCApIC0+IGF4LmZpbHRlciAoIGEgKSAtPiBhP1xuXG5cbiMgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRmlzaGVyJUUyJTgwJTkzWWF0ZXNfc2h1ZmZsZVxuI1xueyBmbG9vciwgcmFuZG9tIH0gPSBNYXRoXG5zaHVmZmxlID0gKCBheCApIC0+XG4gIGJ4ID0gWyBheC4uLiBdXG4gIGkgPSBieC5sZW5ndGhcbiAgdW5sZXNzIGkgPD0gMVxuICAgIHdoaWxlIC0taSA+IDBcbiAgICAgICMgdGhlIGRpc3Rpbmd1aXNoaW5nIGNoYXJhY3RlcmlzdGljIG9mIGZpc2hlci15YXRlcyBpcyB0aGF0IHRoZSByYW5kb21cbiAgICAgICMgdmFsdWUgZ2VuZXJhdGVkIGlzIGJvdW5kZWQgYnkgdGhlIGl0ZXJhdG9yIGluZGV4IChNYXRoLnJhbmRvbSgpICogaSlcbiAgICAgICMgaW5zdGVhZCBvZiB0aGUgc2l6ZSBvZiB0aGUgYXJyYXkgKE1hdGgucmFuZG9tKCkgKiBieC5sZW5ndGgpXG4gICAgICBqID0gZmxvb3IgcmFuZG9tKCkgKiAoaSArIDEpXG4gICAgICBbYnhbaV0sIGJ4W2pdXSA9IFtieFtqXSwgYnhbaV1dXG4gICAgaWYgZXF1YWwgYXgsIGJ4IHRoZW4gc2h1ZmZsZSBheCBlbHNlIGJ4XG4gIGVsc2VcbiAgICBieFxuXG5leHBvcnQge1xuICBmaXJzdFxuICBzZWNvbmRcbiAgdGhpcmRcbiAgZm91cnRoXG4gIGZpZnRoXG4gIG50aFxuICBsYXN0XG4gIHJlc3RcbiAgcHVzaFxuICBwb3BcbiAgc2hpZnRcbiAgdW5zaGlmdFxuICBlbnF1ZXVlXG4gIGRlcXVldWVcbiAgcGVla1xuICBwb2tlXG4gIHNwbGljZVxuICBpbnNlcnRcbiAgcmVtb3ZlXG4gIGNhdFxuICBzbGljZVxuICBmaWxsXG4gIHJhbmdlXG4gIHBsdWNrXG4gIHBhaXJcbiAgc29ydFxuICBjb21wYWN0XG4gIHNodWZmbGVcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxJQUFBLEdBQUEsRUFBQSxPQUFBLEVBQUEsT0FBQSxFQUFBLE9BQUEsRUFBQSxLQUFBLEVBQUEsSUFBQSxFQUFBLEtBQUEsRUFBQSxLQUFBLEVBQUEsTUFBQSxFQUFBLE1BQUEsRUFBQSxJQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsRUFBQSxJQUFBLEVBQUEsS0FBQSxFQUFBLElBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxFQUFBLE1BQUEsRUFBQSxLQUFBLEVBQUEsTUFBQSxFQUFBLElBQUEsRUFBQSxLQUFBLEVBQUEsTUFBQSxFQUFBLEtBQUEsRUFBQSxPQUFBLEVBQUEsS0FBQSxFQUFBLElBQUEsRUFBQSxNQUFBLEVBQUEsS0FBQSxFQUFBLE9BQUEsRUFBQSxVQUFBLEVBQUEsQ0FBQSxNQUFBO0FBQUEsT0FBQSxFQUFRLEtBQVIsRUFBZSxJQUFmLEVBQXFCLE9BQXJCLEVBQThCLE9BQTlCLEVBQXVDLENBQXZDLEVBQTBDLFFBQTFDLEVBQ0UsS0FERixFQUNTLE1BRFQsRUFD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