function comparator(l, r) {
if (!Array.isArray(l)) {
if (!Array.isArray(r)) {
return Math.sign(l - r);
}
return comparator([l], r);
}
if (!Array.isArray(r)) {
return comparator(l, [r]);
}
if (l.length === 0 && r.length === 0) {
return 0;
}
if (l.length === 0) {
return -1;
}
if (r.length === 0) {
return 1;
}
for (let i = 0; i < Math.min(l.length, r.length); i++) {
const result = comparator(l[i], r[i]);
if (result !== 0) {
return result;
}
}
return Math.sign(l.length - r.length);
}