uniapp开发app框架在提升开发效率中的独特优势与应用探索
690
2022-09-01
深入学习D3js:d3-array Search部分
d3.scan(iterable[, comparator])
返回数组最小值下标,具体见上一部分。
d3.bisectLeft(array, x[, lo[, hi]])
返回x在数组中的插入点,lo,hi为可选数组范围,默认为整个数组,如果x已经存在返回该值左侧。
d3.bisector(comparator)
d3.bisector(accessor)
这里构造一个平分器,可以向个人构造的对象插入值,获取值的位置。用法如下:
var data = [ {date: new Date(2011, 1, 1), value: 0.5}, {date: new Date(2011, 2, 1), value: 0.6}, {date: new Date(2011, 3, 1), value: 0.7}, {date: new Date(2011, 4, 1), value: 0.8}];
var bisectDate = d3.bisector(function(d) { return d.date; }).right;
var bisectDate = d3.bisector(function(d, x) { return d.date - x; }).right;
然后可以使用bisectDate(array, date),返回一个下标
import ascending from "./ascending.js";export default function(compare) { if (compare.length === 1) compare = ascendingComparator(compare); return { left: function(a, x, lo, hi) { if (lo == null) lo = 0; if (hi == null) hi = a.length; while (lo < hi) { var mid = lo + hi >>> 1; if (compare(a[mid], x) < 0) lo = mid + 1; else hi = mid; } return lo; }, right: function(a, x, lo, hi) { if (lo == null) lo = 0; if (hi == null) hi = a.length; while (lo < hi) { var mid = lo + hi >>> 1; if (compare(a[mid], x) > 0) hi = mid; else lo = mid + 1; } return lo; } };}function ascendingComparator(f) { return function(d, x) { return ascending(f(d), x); };}
如果传入比较函数参数为1,默认为升序比较。之后将两个函数作为返回值,使用二分查找查x。
d3.bisect(array, x[, lo[, hi]])
import ascending from "./ascending.js";import bisector from "./bisector.js";var ascendingBisect = bisector(ascending);export var bisectRight = ascendingBisect.right;export var bisectLeft = ascendingBisect.left;export default bisectRight;
这个是数组的平分器,就是在对象的平分器传入默认升序函数。
d3.ascending(a, b)
d3.descending(a, b)
function ascending(a, b) { return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;}
function descending(a, b) { return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;}
升序降序的代码实现,这样写避免很多错误。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~