关于d3.js的scan的一个问题

<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这个函数换个写法,寻找的就是其他值的下标了。