<html>
<head>
<script src = "https://d3js.org/d3.v6.js"></script>
<!--<script src = "d3/d3.js"></script>-->
</head>
<body>
<div id="one"></div>
<script>
let a=[2,3,1,56,7,8];
d3.select("#one").text(d3.scan(ar, function ascending(a, b) { return a<b?-1:a>b?1:a=b?0:NaN; }));
</script>
</body>
</html>
想请教一下,这个代码中,ascending(a,b)部分中的a代表的是什么,b又代表的是什么?
给你看下他的源码(我删了一点无关的)
function scan(values, compare) {
const index = leastIndex(values, compare);
return index < 0 ? undefined : index;
}
function leastIndex(values, compare) {
let minValue;
let min = -1;
let index = -1;
for (const value of values) {
++index;
if (min < 0
? compare(value, value) === 0
: compare(value, minValue) < 0) {
minValue = value;
min = index;
}
}
return min;
}
从代码看,d3.scan(ar, fn)是寻找数组某个值对应的下标,这里ar应该是一个数组,是上面的变量a,写错了。
在来分析ascending,ascending对应源码里的compare函数,从compare(value, minValue)可以看出,参数a对应value,也就是数组当前值,参数b对应minValue,代表最小值,整体就是寻找数组最小值对应的下标。但是ascending这个函数换个写法,寻找的就是其他值的下标了。