Lodash | 指定路径对Object操作

Lodash

Lodash 通过降低 array、number、objects、string 等等的使用难度从而让 JavaScript 变得更简单。
提供用于遍历 array、object 和 string,对值进行操作和检测,创建符合功能的函数的模块化方法。

中文文档

英文文档

在Lodash文档中列举模块方式的使用方法,下面我将总结指定路径对Object操作的模块方法。

指定路径对Object操作

下面样例使用的数据JSON结构:

let msg= {
  "Tom": {
    "id": 9,
    "age": 25,
    "department": "dev",
    "role": ['programmer', 'manager', 'master']
  },
  "Janny": {
    "id": 10,
    "age": 24,
    "department": "dev",
    "role": ['programmer']
  },
  "Jan": {
    "id": 11,
    "age": 26,
    "department": "dev",
    "role": ['manager', 'master'],
    "constantValue": mockFunction()
  }
}

function mockFunction() {
  return "AAAAAAA";
}

取值操作

_.get && _.at

_.get(object, path, [defaultValue])
_.at(object, [paths])

get每一次只能指定一个路径取一个值,相比at有个默认值,如果解析 value 是 undefined 会以默认值取代
at能够指定多个路径,返回时以数组格式返回

 _.get(msg, ['Tom', 'role', 1], null)
  //==> 'manager'
 _.get(msg, 'Tom.role[1]', null)
  // ==> 'manager'
 _.at(msg, ['Tom.id', 'Janny.id', 'Jan.id'])
  // ==>  [9,10, 11,]

修改值操作

_.set && _.update

_.set(object, path, value)
_.update(object, path, updater)

set和update都能够根据提供的path对Object中的某一个值进行操作,set在path不存在时会自动创建,而对update需要在function手动校验

 _.set(msg, 'Tom.age', 23);
 _.set(msg, ['Tom', 'id'], 1);
 _.update(msg, 'Janny.role', (roleList) => {
    if (roleList == undefined) {
      return "AAA"
    }
    roleList.push("manager")
    return roleList;
  })

_.setWith && _.updateWith

在各自的基础上,添加一个对路径的操作,目前知道当路径为纯数字时能够起到作用

  var object1 = {};
  var object2 = {};
  _.setWith(object1, [321312, 67763], 23, Object)
  _.setWith(object2, '321312.67763', 23, Object)
/**
  object1: {
    321312: {
      67763: 23,
    },
  }
  object2: {
    321312: {
      67763: 23,
    },
  }   
**/

移除值操作

_.unset

_.unset(object, path)
根据path移除,(注意:当路径不存在时是不会报错的)

_.unset(msg, 'Tom.role')

校验操作

_.has && _.hasIn

_.has(object, path)
检查 path 是否是object对象的直接属性

_.hasIn(object, path)
检查 path 是否是object对象的直接或继承属性。

其他

_.invoke && _.invoke

_.invoke(object, path, [args])
调用object对象path上的方法。

_.result(object, path, [defaultValue])
这个方法类似 _.get, 除了如果解析到的值是一个函数的话,就绑定 this 到这个函数并返回执行后的结果。

posted @ 2020-09-05 15:11  听说这是最长的名字了  阅读(753)  评论(0编辑  收藏  举报