Typescript中的d3.max(…)返回一个字符串
d3.min/max函数返回的是Typescript中的d3.max(…)返回一个字符串,typescript,d3.js,Typescript,D3.js,d3.min/max函数返回的是字符串,而不是数字 var nonEmptySets = []; this.data.forEach(function(ds) { //data: Array<Array<[number, number]>> if(ds && ds.length > 0) { nonEmptySets.push(ds); }
字符串,而不是数字
var nonEmptySets = [];
this.data.forEach(function(ds) { //data: Array<Array<[number, number]>>
if(ds && ds.length > 0) {
nonEmptySets.push(ds);
}
})
var max = d3.max(nonEmptySets[0], function(d) { return d[1]; }); //max: string
var nonEmptySets=[];
this.data.forEach(函数(ds){//data:Array
如果(ds&&ds.length>0){
非空推(ds);
}
})
var max=d3.max(非空集[0],函数(d){返回d[1];})//马克斯:字符串
我知道我可以将max的值转换为数字
,但我不明白为什么函数返回字符串
D3。max不执行任何类型转换。如果您输入字符串,它将返回字符串
此外,使用自然顺序而不是数字顺序对元素进行比较。例如,字符串[“20”,“3”]的最大值为“3”,而数字[20,3]的最大值为20
我也面临同样的问题
在深入研究@types/d3
的源代码后,我发现有4个d3.max的重载:
/**
* Return the maximum value in the array of strings using natural order.
*/
export function max(array: ArrayLike<string>): string | undefined;
/**
* Return the maximum value in the array of numbers using natural order.
*/
export function max<T extends Numeric>(array: ArrayLike<T>): T | undefined;
/**
* Return the maximum value in the array using natural order and a projection function to map values to strings.
*/
export function max<T>(array: ArrayLike<T>, accessor: (datum: T, index: number, array: ArrayLike<T>) => string | undefined | null): string | undefined;
/**
* Return the maximum value in the array using natural order and a projection function to map values to easily-sorted values.
*/
export function max<T, U extends Numeric>(array: ArrayLike<T>, accessor: (datum: T, index: number, array: ArrayLike<T>) => U | undefined | null): U | undefined;
或者像这样覆盖T
和U
:
var nonEmptySets: Array<Array<[number, number]>> = [];
var max = d3.max<[number, number], number>(nonEmptySets[0], function(d) { return d[1];
});
var max=d3.max(非空集[0],函数(d){返回d[1];
});
然后您会得到max:number
非空集的定义是什么。我看到的max的定义返回的类型与您传入的回调返回的类型相同,因此无论d[1]
的类型是什么,都将是max
的返回类型(因为泛型)您的nonEmptySets[0]对象看起来如何?