From ce5f3e1fe76066a281715e075bf85da05e810cf9 Mon Sep 17 00:00:00 2001 From: Daniel Imfeld Date: Thu, 23 Feb 2023 14:17:37 -1000 Subject: [PATCH] Alter rank function to not crash on Safari 14 when passed a one-element array Related to #123 --- src/rank.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/rank.js b/src/rank.js index 0572e1fa..44fb675b 100644 --- a/src/rank.js +++ b/src/rank.js @@ -8,10 +8,10 @@ export default function rank(values, valueof = ascending) { if (valueof.length !== 2) V = V.map(valueof), valueof = ascending; const compareIndex = (i, j) => valueof(V[i], V[j]); let k, r; - Uint32Array - .from(V, (_, i) => i) - .sort(valueof === ascending ? (i, j) => ascendingDefined(V[i], V[j]) : compareDefined(compareIndex)) - .forEach((j, i) => { + values = Uint32Array.from(V, (_, i) => i); + // Risky chaining due to Safari 14 https://github.com/d3/d3-array/issues/123 + values.sort(valueof === ascending ? (i, j) => ascendingDefined(V[i], V[j]) : compareDefined(compareIndex)); + values.forEach((j, i) => { const c = compareIndex(j, k === undefined ? j : k); if (c >= 0) { if (k === undefined || c > 0) k = j, r = i;