Skip to content

Commit 0c20525

Browse files
committed
Add d3.pairs.
1 parent 8d9d2b7 commit 0c20525

5 files changed

Lines changed: 43 additions & 5 deletions

File tree

d3.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,11 @@ d3 = function() {
147147
while (i--) permutes[i] = array[indexes[i]];
148148
return permutes;
149149
};
150+
d3.pairs = function(array) {
151+
var pairs = [], i = 0, n = array.length, p0, p1 = array[i];
152+
while (++i < n) pairs.push([ p0 = p1, p1 = array[i] ]);
153+
return pairs;
154+
};
150155
d3.zip = function() {
151156
if (!(n = arguments.length)) return [];
152157
for (var i = -1, m = d3.min(arguments, d3_zipLength), zips = new Array(m); ++i < m; ) {

d3.min.js

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/arrays/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import "quantile";
1010
import "bisect";
1111
import "shuffle";
1212
import "permute";
13+
import "pairs";
1314
import "zip";
1415
import "transpose";
1516
import "keys";

src/arrays/pairs.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
d3.pairs = function(array) {
2+
var pairs = [], i = 0, n = array.length, p0, p1 = array[i];
3+
while (++i < n) pairs.push([p0 = p1, p1 = array[i]]);
4+
return pairs;
5+
};

test/arrays/pairs-test.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
var vows = require("vows"),
2+
load = require("../load"),
3+
assert = require("../assert");
4+
5+
var suite = vows.describe("d3.pairs");
6+
7+
suite.addBatch({
8+
"pairs": {
9+
topic: load("arrays/pairs").expression("d3.pairs"),
10+
"returns the empty array if input array has length less than two": function(pairs) {
11+
assert.deepEqual(pairs([]), []);
12+
assert.deepEqual(pairs([1]), []);
13+
},
14+
"returns pairs of adjacent elements in the given array": function(pairs) {
15+
assert.deepEqual(pairs([1, 2]), [[1, 2]]);
16+
assert.deepEqual(pairs([1, 2, 3]), [[1, 2], [2, 3]]);
17+
var a = {}, b = {}, c = {}, d = {};
18+
assert.deepEqual(pairs([a, b, c, d]), [[a, b], [b, c], [c, d]]);
19+
},
20+
"includes null or undefined elements in pairs": function(pairs) {
21+
assert.deepEqual(pairs([1, null, 2]), [[1, null], [null, 2]]);
22+
assert.deepEqual(pairs([1, 2, undefined]), [[1, 2], [2, undefined]]);
23+
}
24+
}
25+
});
26+
27+
suite.export(module);

0 commit comments

Comments
 (0)