跳到主要内容

lodash的一些疑问

今天有点空,看了会lodash,其中有一个方法让我奇怪了很久——differenceBy; 然后思考了挺长时间,终于明白了,没想到一个api居然都要理解那么久。 首先贴一下官方的定义:

.differenceBy(array, [values], [iteratee=.identity]) 这个方法类似_.difference ,除了它接受一个 iteratee (迭代器), 调用array 和 values 中的每个元素以产生比较的标准。 结果值是从第一数组中选择。iteratee 会调用一个参数:(value)。(首先使用迭代器分别迭代array 和 values中的每个元素,返回的值作为比较值)。

例子

_.differenceBy([3.1, 2.2, 1.3], [4.4, 2.5], Math.floor);
// => [3.1, 1.3]

我想了半天没理解这个是什么意思,知道后来我自己手动调用,然后经过几次尝试,终于明白了,接下来把我的心路历程说下: 首先,第三个参数是个function,然后我们把这个方法改造下,

_.differenceBy(
[3.1, 2.2, 1.3],
[4.4, 2.5],
function(o) {
return Math.floor(o);
});

然后通过debug得到o其实就是两个数组的值的遍历,然后把Math.floor(o)之后的值相比较,第一个数组里和第二个数组里的值不一样的给返回(是经过Math.floor处理过后的); 其实说白了还是对Math.floor这个方法有点陌生,导致思路有点跟不上; 不懂的时候苦思冥想就是不理解,甚至想不到合适的方法去验证想法——因为根本不知道从哪里去想;但是当你明白之后觉着这些东西其实很简单,不明白为什么当初会想不明白。 所以也稍微有些感触吧,那就是遇到一个问题的时候不可怕,对一个问题完全没有想法的时候才可怕,只要有思路,有想法,哪怕是错的,只要去尝试,总会有一些收获的,但是如果完全没有想法,也没有思路,就这样木木的看是很难有收获的,但是我们从小的教育导致我们很多时候没有自己的想法,只是照搬书本或者已有的知识,如果只是这样的话,注定是走不远的,所有当我们遇到问题的时候,不管会不会,至少要有一些自己的想法,哪怕是错的,哪怕是完全相反的方向,但是当你深入了解就会明白一自己的错误点,帮助自己的改进

Loading Comments...