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

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

报告相同问题?

悬赏问题

  • ¥15 PointNet++的onnx模型只能使用一次
  • ¥20 西南科技大学数字信号处理
  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。