zero骑士 2021-04-07 10:52 采纳率: 91.7%
浏览 13
已采纳

关于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又代表的是什么?

  • 写回答

1条回答 默认 最新

  • hfhan_872914334 2021-04-07 14:56
    关注

    给你看下他的源码(我删了一点无关的)

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?