Lodash踩坑之dropWhile,dropRigntWhile

在学习Lodash的drop时发现了一个很恶心的问题,一起某度一搜索,全是文档下copy下来的代码,但实际操作时我却遇到了如下的问题:

先放中文文档上的代码案例:

//true在第一位置
var users = [
  { 'user': 'barney',  'active': false },
  { 'user': 'fred',    'active': false },
  { 'user': 'pebbles', 'active': true }
];
 
_.dropWhile(users, function(o) { return !o.active; });
// => objects for ['pebbles']
 

官方这里将active值为 false的数据过滤掉,然而我切换了数据的格式后发现输出结果不对。

var _ = require('lodash');
var users = [
//请注意ture在最后一个位置
     {
    'user': 'barney',
    'active': true
  },
   {
     'user': 'fred',
     'active': false
   },
  {
    'user': 'pebbles',
    'active': false
  }
];
console.log(_.dropWhile(users, function (o) {
  return o.active==false;
}))


//[ { user: 'fred', active: false },
  //{ user: 'pebbles', active: false },
  //{ user: 'barney', active: true } ]

这结果并不是我想要的,而是将整个数组全部返回了! 

但是假如说我现在不想过滤false,我想过滤为true值,当我变换了数组后才发现了这个函数的问题所在:请看下例子

var _ = require('lodash');
var users = [
//请注意true在第一个位置
    {
        'user': 'fred',
        'active': true
    },
    {
        'user': 'barney',
        'active': false
    },
    {
        'user': 'pebbles',
        'active': false
    }
];
console.log(_.dropWhile(users, function (o) {
    console.log(o.active)
  return o.active==true;
}))


//[ { user: 'barney', active: false },
 // { user: 'pebbles', active: false } ]

 这次算是筛选成功了。。。。。。

这很玄学,不应该过滤掉数组中所有与迭代函数相同的数据吗????

 打印代码输出后发现每次执行代码与迭代函数中的值不符时便会停止执行。。。。

D:\demo\first-vue\src\lodash>node test.js
false
[ { user: 'fred', active: false },
  { user: 'barney', active: true },
  { user: 'pebbles', active: false } ]

D:\demo\first-vue\src\lodash>node test.js
true
false
[ { user: 'barney', active: false },
  { user: 'pebbles', active: false } ]

D:\demo\first-vue\src\lodash>node test.js
true
[ { user: 'fred', active: true },
  { user: 'barney', active: false },
  { user: 'pebbles', active: false } ]

 相对于的dropRightWhile函数也是这个特性,遇到第一个与迭代函数不符的判断时便会停止执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值