module.exports = ({ byProperty }) => {
return (a, b) => {
if (byProperty !== undefined) {
a = a[byProperty]
b = b[byProperty]
}
const regexTemplate = /(\d+)|(\D+)/g;
const ax = [], bx = [];
a.replace(regexTemplate, function (_, $1, $2) {
ax.push([$1 || Infinity, $2 || ""])
});
b.replace(regexTemplate, function (_, $1, $2) {
bx.push([$1 || Infinity, $2 || ""])
});
while (ax.length && bx.length) {
const an = ax.shift();
const bn = bx.shift();
const nn = (parseFloat(an[0]) - parseFloat(bn[0])) || an[1].localeCompare(bn[1]);
if (nn) {
return nn;
}
}
return ax.length - bx.length;
}
}