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

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

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

报告相同问题?

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效