Comments (2)
I’d definitely recommend adopting the D3 module pattern. Despite the name, your module needn’t have any D3 dependencies for it to make sense to use this pattern; see the standalone d3-queue library for instance.
As for including this in d3-array, well, it’s not really to my taste. Sorry. I tend to prefer using ||
for composite comparators. To take your example:
var cmp = d3.comparator()
.order(d3.descending, function(d) { return d.year; })
.order(d3.ascending, function(d) { return d.value; });
I’d probably write this as:
function cmp(a, b) {
return b.year - a.year
|| a.value - b.value;
}
Or, if value
is something else naturally comparable (like a Date or string), I might say:
function cmp(a, b) {
return b.year - a.year
|| ascending(a.value, b.value);
}
Or if I wanted to be explicit:
function cmp(a, b) {
return descending(a.year, b.year)
|| ascending(a.value, b.value);
}
from d3-array.
Also, regarding:
Constructs a new comparator with the default return value 0. I.e. using it will not change sort order.
A comparator that returns 0 (or NaN) isn’t guaranteed to preserve the existing order; that’s only true for stable sorting algorithms, and ECMAScript doesn’t require stable sort. (Related StackOverflow.)
from d3-array.
Related Issues (20)
- BUG: d3-array/dist/d3-array.js: Unexpected token (139:15) HOT 4
- fix(babel): cumsum HOT 1
- binary ticks increments on linear scale HOT 2
- D3-array produces ERR_REQUIRE_ESM with node >= 15 HOT 3
- bisectCenter naming HOT 1
- quantile returns undefined on an empty array, differs from extent HOT 1
- Docs: define the bin thresholds with array HOT 2
- First and last thresholds are set to data extent (not explicitly stated limits) HOT 2
- bisector no longer supports two-argument (object, value) comparator HOT 12
- Testing a lib using `d3-array` HOT 1
- d3.blur HOT 1
- Incorrect results for binary search on large arrays due to miscomputation of midpoint HOT 11
- d3.bin can mutate the user-specified thresholds
- About the sorting problem of d3.rank HOT 2
- Insecure Randomness for the useof Math.random() in shuffle API (security vulnerability) HOT 1
- d3.thresholdScott returns NaN for single-element arrays
- Feature request: `find` / `findValue` methods
- groupSort should use ascendingDefined instead of ascending
- medianIndex/quantileIndex doesn’t handle missing data HOT 3
- can d3-array also support BigInt numbers? HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from d3-array.