当前位置:   article > 正文

lodash 总结_lodash升级

lodash升级

lodash–while

v4.17.5版本带有while的函数有四个:

  • dropWhile 0->n-1 drop 新建一个数组,直到identity返回false
  • dropRightWhile n-1->0 drop
  • takeWhile
  • takeRightWhile

参数是一样的 fn(array, [predicate=_.identity])

默认情况 while[identity]

identity是一个函数,接受三个参数,会经过baseIteratee处理。
源码分析:

//首先用baseIteratee处理identity
function dropWhile(array, predicate) {
  return (array && array.length)
    ? baseWhile(array, baseIteratee(predicate, 3), true)
    : [];
}
// baseIteratee返回的是一个identity函数,默认返回如下函数。还有很多个情况,见下文
function identity (value){
    return value // 返回会被Boolean强转
}

arr=[true,1,{},[],'']
_.dropWhile(arr) //-> ['']
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

其他情况

如果没有第二个参数,会直接使用默认的identity函数。不然

baseIteratee

baseIteratee函数处理可以接受四种类型的参数函数、对象、数组、其他

  1. function 函数,会直接返回
var users = [
  { 'user': 'barney',  'active': true },
  { 'user': 'fred',    'active': true },
  { 'user': 'pebbles', 'active': false }
];
_.dropWhile(users, function(o) { return o.active; });
// => objects for ['pebbles']
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  1. null 空,返回identity
function identity(value){
    return value
}
//for example
arr=[true,1,{},[],'',{}]
_.dropWhile(arr) //-> ['',{}]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  1. object 对象且非数组,会经过baseMatches处理

返回baseIsMatch判断两个对象属性是否相等

var users = [
  { 'user': 'barney',  'active': true },
  { 'user': 'fred',    'active': true },
  { 'user': 'pebbles', 'active': false }
];
_.dropWhile(users, { 'user': 'barney', 'active': false });
// => objects for ['fred', 'pebbles']
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  1. array 数组,会经过baseMatchesProperty处理。
//要求: array = [path, value]。为对象的属性路径和值。
//返回结果简要为
function array(key, srcValue) {
  return function(object) {
    return object[key] === srcValue
  };
  //还有其他情况
}
//for example
var users = [
  { 'user': 'fred',  'active': 123 },
  { 'user': 'fred',    'active': 234 },
  { 'user': 'pebbles', 'active': 345 },
  { 'user': 'fred',    'active': 234 },
];
_.dropWhile(users,['user','barney'])
// => [{ 'user': 'pebbles', 'active': 345 },{ 'user': 'fred',    'active': 234 }]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  1. other 其他,会经过property处理。
//property返回一个函数,函数根据对象参数会返回属性值
let fn1 = _.property('a')
fn1({a:121})  // -> 121

let fn1 = _.property(['a','b'])
fn2({a:{b:"24242"}})  // ->24242

//for example
var users = [
  { 'user': 'barney',  'active': [] },
  { 'user': 'fred',    'active': null },
  { 'user': 'pebbles', 'active': true },
  { 'user': 'pebbles', 'active': false },
];
_.dropWhile(users, 'active');
// => [
//  { 'user': 'fred',    'active': null },
//  { 'user': 'pebbles', 'active': true },
//  { 'user': 'pebbles', 'active': false },
//]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

那么问题来了:

let arr = [{a:1,b:undefined},{a:2}]
let res1 = _.dropWhile(arr,'b')
let res2 = _.dropWhile(arr,['b'])
  • 1
  • 2
  • 3

请问res1.lengthres2.length相等吗?

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/818181
推荐阅读
  

闽ICP备14008679号