d3.min & d3.max: ignore NaN at [0].

Note: this now returns Infinity and -Infinity for zero-element arrays, whereas
previously an error would have occurred.

Fixes #161.
This commit is contained in:
Jason Davies 2011-05-30 09:43:47 +01:00
Родитель 7e08dc10ef
Коммит 25e77c4f67
8 изменённых файлов: 38 добавлений и 14 удалений

10
d3.js поставляемый
Просмотреть файл

@ -41,27 +41,25 @@ d3.descending = function(a, b) {
return b < a ? -1 : b > a ? 1 : 0;
};
d3.min = function(array, f) {
var i = 0,
var i = -1,
n = array.length,
a = array[0],
a = Infinity,
b;
if (arguments.length === 1) {
while (++i < n) if (a > (b = array[i])) a = b;
} else {
a = f.call(array, a, 0);
while (++i < n) if (a > (b = f.call(array, array[i], i))) a = b;
}
return a;
};
d3.max = function(array, f) {
var i = 0,
var i = -1,
n = array.length,
a = array[0],
a = -Infinity,
b;
if (arguments.length === 1) {
while (++i < n) if (a < (b = array[i])) a = b;
} else {
a = f.call(array, a, 0);
while (++i < n) if (a < (b = f.call(array, array[i], i))) a = b;
}
return a;

4
d3.min.js поставляемый

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Просмотреть файл

@ -1,12 +1,11 @@
d3.max = function(array, f) {
var i = 0,
var i = -1,
n = array.length,
a = array[0],
a = -Infinity,
b;
if (arguments.length === 1) {
while (++i < n) if (a < (b = array[i])) a = b;
} else {
a = f.call(array, a, 0);
while (++i < n) if (a < (b = f.call(array, array[i], i))) a = b;
}
return a;

Просмотреть файл

@ -1,12 +1,11 @@
d3.min = function(array, f) {
var i = 0,
var i = -1,
n = array.length,
a = array[0],
a = Infinity,
b;
if (arguments.length === 1) {
while (++i < n) if (a > (b = array[i])) a = b;
} else {
a = f.call(array, a, 0);
while (++i < n) if (a > (b = f.call(array, array[i], i))) a = b;
}
return a;

Просмотреть файл

@ -16,3 +16,11 @@ console.log(" " + d3.max([1, 2, 3, 4, 5], function(d, i) {
return i;
}));
console.log("");
console.log("max with first element NaN:");
console.log(" " + d3.max([NaN, 1, 2, 3, 4, 5]));
console.log("");
console.log("max with last element NaN:");
console.log(" " + d3.max([1, 2, 3, 4, 5, NaN]));
console.log("");

Просмотреть файл

@ -7,3 +7,9 @@ max with accessor function:
max index:
4
max with first element NaN:
5
max with last element NaN:
5

8
tests/test-min.js поставляемый
Просмотреть файл

@ -16,3 +16,11 @@ console.log(" " + d3.min([1, 2, 3, 4, 5], function(d, i) {
return i;
}));
console.log("");
console.log("min with first element NaN:");
console.log(" " + d3.min([NaN, 1, 2, 3, 4, 5]));
console.log("");
console.log("min with last element NaN:");
console.log(" " + d3.min([1, 2, 3, 4, 5, NaN]));
console.log("");

Просмотреть файл

@ -7,3 +7,9 @@ min with accessor function:
min index:
0
min with first element NaN:
1
min with last element NaN:
1