摘要:昨天看了方法,今天是方法。为数组的一个,为当前数组的为原数组。还是先翻源码吧。返回了看楼下的代码段,返回了一个。与相比,提供了一个用于遍历迭代的函数,多使用到了一个。暂时只讨论为函数的情况。简化为数组长度,为不符合条件的角标。
昨天看了drop方法,今天是dropWhile方法。
使用_.dropWhile(array, [predicate=_.identity])
创建一个切片数组,去除array中从起点开始到 predicate 返回假值结束部分。predicate 会传入3个参数: (value, index, array)。
value为数组的一个ele,index为当前数组的index,value为原数组。
* var users = [ * { "user": "barney", "active": false }, * { "user": "fred", "active": false }, * { "user": "pebbles", "active": true } * ]; * * _.dropWhile(users, function(o) { return !o.active; }); * // => objects for ["pebbles"] *
其实看到这我有点懵逼,不知道是开了一天会的原因么。还是先翻源码吧。
function dropWhile(array, predicate) { return (array && array.length) ? baseWhile(array, baseIteratee(predicate, 3), true) : []; }
dropWhile返回了baseWhile,看楼下的代码段,baseWhile返回了一个baseSlice。与drop相比,提供了一个predicate用于遍历迭代的函数,多使用到了一个baseWhile。类似于var dropWhile = (...) => baseWhile(...) => baseSlice(...)
function baseWhile(array, predicate, isDrop, fromRight) { var length = array.length, index = fromRight ? length : -1; while ((fromRight ? index-- : ++index < length) && predicate(array[index], index, array)) {} return isDrop ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); }
predicate这个参数在传入baseWhile时,先被baseIteratee调用,我们先确认这个函数是用来做什么的。了解作者的目的。
import baseMatches from "./_baseMatches.js"; import baseMatchesProperty from "./_baseMatchesProperty.js"; import identity from "./identity.js"; import isArray from "./isArray.js"; import property from "./property.js"; /** * The base implementation of `_.iteratee`. */ function baseIteratee(value) { // Don"t store the `typeof` result in a variable to avoid a JIT bug in Safari 9. // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. if (typeof value == "function") { return value; } if (value == null) { return identity; } if (typeof value == "object") { return isArray(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value); } return property(value); }
baseIteratee这个方法留给下一篇解决。暂时只讨论predicate为函数的情况。 baseIteratee会直接返回当前的传入的predicate.
baseWhile(array, baseIteratee(predicate, 3), true) => baseWhile(array, predicate, true)
我们再继续说baseWhile。baseWhile(array, predicate, isDrop, fromRight),从命名上来看,isDrop表示是否是drop方法,翻看其它部分,再takeWhile中也用到了baseWhile。fromRight表示顺序是从右到左还是从左到右
假设我们当前fromRight为flase
我们思考如下代码,
// now fromRight = false ,所有我们修改下代码 var length = array.length, index = -1; while ((++index < length) && predicate(array[index], index, array)) {}
while循环如果符合条件会一直执行下去。当前while执行条件是(++index < length) &&predicate(array[index], index, array),也就是遍历当前数组,然后当前数组对应的array[i]等参数传入predicate,一旦predicate返回fasle,就跳出当前循环,执行baseSlice。
baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) //简化 baseSlice(array, index, length)// length为数组长度,index为不符合条件的角标。
predicate到底是什么
英文中是断言,断定的意思,我理解为一种判定(这里我有些模凌两可,感觉自己不对,有朋友纠正一下么。)
predicate函数用来判定符合你预先设定的条件,它总是返回true or false.如果不符合条件,说的直接点就是返回false,在baseWhile中就返回当前的index,然后去baseSlice(array,index,end)
关于baseSlice 上一篇我已经简单介绍过了。链接
这是我自己的乱言乱语,也希望对看到的人有帮助。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/94722.html
摘要:包是开发中常用的工具包,里面有许多实用的方法,今天分析常用的一个去重方法用法源码包可以看到,函数这边只做了一个针对的封装,所以继续看源码 lodash.js包是node开发中常用的js工具包,里面有许多实用的方法,今天分析常用的一个去重方法---uniq 用法 _.uniq([2, 1, 2]) // => [2, 1] 源码包 // uniq.js i...
摘要:的使用形式和类似,它将中为的元素组成一个迭代器返回,如果是,则返回中所有计算为的项。用于将多个可迭代对象对应位置的元素作为一个元组,将所有元组组成一个迭代器,并返回。 itertools 我们知道,迭代器的特点是:惰性求值(Lazy evaluation),即只有当迭代至某个值时,它才会被计算,这个特点使得迭代器特别适合于遍历大文件或无限集合等,因为我们不用一次性将它们存储在内存中。 ...
摘要:代码如下所示按照正常使用习惯,操作来实现样式的添加和卸载,是一贯技术手段。将帮助我们进行操作。 继 24 个实例入门并掌握「Webpack4」(一) 后续: JS Tree Shaking CSS Tree Shaking 图片处理汇总 字体文件处理 处理第三方 js 库 开发模式与 webpack-dev-server 开发模式和生产模式・实战 打包自定义函数库 九、JS Tre...
摘要:在实际的开发场景中,我们经常需要对一组数组进行过滤,选出其中只含有正整数的值。比如接口的查询字符串中传入一组,该是正整数数值。有关方法的文档可以查询以下是源码,使用了的语法 在实际的开发场景中,我们经常需要对一组数组进行过滤,选出其中只含有正整数的值。比如接口的查询字符串中传入一组 id,该 id 是正整数数值。 有关方法的文档可以查询 Lodash Number.MAX_SAFE_...
阅读 2555·2021-11-22 12:05
阅读 3440·2021-10-14 09:42
阅读 1675·2021-07-28 00:15
阅读 1981·2019-08-30 11:08
阅读 1475·2019-08-29 17:31
阅读 918·2019-08-29 16:42
阅读 2327·2019-08-26 11:55
阅读 2107·2019-08-26 11:49