Fix d3.mean: coerce strings to numbers.

Fixes #2067.
This commit is contained in:
Jason Davies 2014-10-16 09:16:02 +01:00
Родитель 1fc660a6b6
Коммит dd1e9165c9
4 изменённых файлов: 11 добавлений и 5 удалений

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

@ -93,9 +93,9 @@
d3.mean = function(array, f) {
var s = 0, n = array.length, a, i = -1, j = n;
if (arguments.length === 1) {
while (++i < n) if (d3_number(a = array[i])) s += a; else --j;
while (++i < n) if (d3_number(a = array[i])) s += +a; else --j;
} else {
while (++i < n) if (d3_number(a = f.call(array, array[i], i))) s += a; else --j;
while (++i < n) if (d3_number(a = f.call(array, array[i], i))) s += +a; else --j;
}
return j ? s / j : undefined;
};

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

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

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

@ -7,9 +7,9 @@ d3.mean = function(array, f) {
i = -1,
j = n;
if (arguments.length === 1) {
while (++i < n) if (d3_number(a = array[i])) s += a; else --j;
while (++i < n) if (d3_number(a = array[i])) s += +a; else --j;
} else {
while (++i < n) if (d3_number(a = f.call(array, array[i], i))) s += a; else --j;
while (++i < n) if (d3_number(a = f.call(array, array[i], i))) s += +a; else --j;
}
return j ? s / j : undefined;
};

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

@ -28,6 +28,12 @@ suite.addBatch({
"applies the optional accessor function": function(mean) {
assert.equal(mean([[1, 2, 3, 4, 5], [2, 4, 6, 8, 10]], function(d) { return mean(d); }), 4.5);
assert.equal(mean([1, 2, 3, 4, 5], function(d, i) { return i; }), 2);
},
"coerces strings to numbers": function(mean) {
assert.equal(mean(["1"]), 1);
assert.equal(mean(["5", "1", "2", "3", "4"]), 3);
assert.equal(mean(["20", "3"]), 11.5);
assert.equal(mean(["3", "20"]), 11.5);
}
}
});