深处
获取、设置、去除和测试深层嵌入属性
帮助您安全工作 与嵌入属性.
安装
使用 雅伦数字 :
$ yarn add @blakek/deep
...或使用 无数字 :
$ npm i --save @blakek/deep
使用量
import {
clone,
createGetter,
get,
has,
omit,
pluck,
remove,
set
// also available:
// - createHas
// - createOmit
// - createPluck
// - createRemove
// - createSetter
// - isObject
// - traverseObject
} from '@blakek/deep';
const user = {
id: 'abf87de',
roles: ['alert:create', 'alert:read'],
sites: {
github: {
username: 'blakek'
}
}
};
// Deeply clone most values
const userCopy = clone(user);
user === userCopy; //» false
user.id === userCopy.id; //» true
user.roles === userCopy.roles; //» false
user.roles[0] === userCopy.roles[0]; //» true
// Get a property value
get('sites.github.username', user); //» 'blakek'
// Get a property value with a fallback other than `undefined`
get('sites.facebook.username', user, 'no-account'); //» 'no-account'
// Create a function to get a property value later
const getUsername = createGetter('sites.github.username');
getUsername(user); //» 'blakek'
// Test for a property value
has('sites.github', user); //» true
// Clone an object and omit properties
omit(['roles', 'sites'], user); //» { id: 'abf87de' }
// Pluck a subset of properties
pluck(['id', 'roles'], user);
//» { id: 'abf87de', roles: [ 'alert:create', 'alert:read' ] }
// Remove a property value, modifying the current object
remove('a', { a: 42, b: 123 }); //» { b: 123 }
// Set a property value, modifying the current object
set(123, 'a.b.c', { a: 42 }); //» { a: { b: { c: 123 } } }
API 密码
对于所有这些:
path可以是点标记字符串,也可以是一系列路径部件
clone
返回大多数值的深克隆 / 深复制: 原始值、 对象、 阵列、 地图、 设定、 日期等 .
function clone<T extends unknown>(value: T): T;
const object = { value: 'yep' };
const cloned = clone(object);
cloned === object; //» false
cloned.value === object.value; //» true
get 编号 : createGetter
获得带有可选倒计时值的给定路径值.
function get(path: Path, object: object, fallbackValue?: any): unknown;
function createGetter(
path: Path,
fallbackValue?: any
): (object: object) => unknown;
const user = {
id: 'abf87de',
roles: ['alert:create', 'alert:read'],
sites: {
github: {
username: 'blakek'
}
}
};
get('id', user); //» 'abf87de'
get('roles.0', user); //» 'alert:create'
get('roles[0]', user); //» 'alert:create'
get(['roles', 1], user); //» 'alert:read'
get('sites.github.username', user); //» 'blakek'
get('sites.github.avatar.src', user, 'default.png'); //» 'default.png'
const getID = get('id');
getID(user); //» 'abf87de'
const getRoles = createGetter('roles');
getRoles(user); //» ['alert:create', 'alert:read']
has 编号 : createHas
回返 true 如果在给定路径中找到一个值或 false 如果什么都没有
发现.
function has(path: Path, object: any): boolean;
function createHas(path: Path): (object: any) => boolean;
const product = {
id: 'abf87de',
name: 'Logo T-Shirt',
attributes: {
isCool: undefined,
materials: ['cotton']
}
};
has('attributes.materials', product); //» true
has(['avability', 'sizes'], product); //» false
has('attributes.isCool', product); //» true; property exists but is undefined
const hasMaterials = createHas('attributes.materials');
hasMaterials(product); //» true
// NOTE: `get()` should be used if you want to ensure a value is not `undefined`
get('attributes.isCool', product, false); //» false
omit 编号 : createOmit
返回已删除属性列表的对象的克隆.
说明: omit() 返回带有删除属性的克隆。 如果你宁愿修改
,考虑使用 remove()。 。 。 .
function omit(properties: Path[], object: any): any;
function createOmit(properties: Path[]): (object: any) => any;
const user = {
username: 'blakek',
roles: ['alert:create', 'alert:read'],
sites: {
github: {
username: 'blakek'
}
}
};
omit(['roles', 'sites'], user); //» { username: 'blakek' }
omit(['username', 'roles', 'sites.doesnt.exist'], user);
//» { sites: { github: { username: 'blakek' } } }
const omitExtra = createOmit(['roles, sites']);
omitExtra(user); //» { username: 'blakek' }
pluck 编号 : createPluck
从对象中获取一个属性子集.
function pluck(properties: Path[], object: any): any;
const user = {
username: 'blakek',
roles: ['alert:create', 'alert:read'],
sites: {
github: {
username: 'blakek'
}
}
};
pluck(['username'], user); //» { username: 'blakek' }
pluck(['username', 'roles'], user);
//» { username: 'blakek', roles: [ 'alert:create', 'alert:read' ] }
const permissionInfo = pluck(['roles', 'username']);
permissionInfo(user); //» { roles: [ 'alert:create', 'alert:read' ], username: 'blakek' }
remove 编号 : createRemove
删除路径中的值并返回对象.
说明: remove() 修改通过的对象而不是创建副本. 若为
您宁愿返回新对象 :
- 使用情况
omit()· ;omit()返回带有删除属性列表的克隆 - 使用情况
clone()在此之前remove() - 考虑另一种解决办法(不变 真的很不错)
function remove(path: Path, object: any): any;
function createRemove(path: Path): (object: any) => any;
const user = {
username: 'blakek',
password: 'wouldntyouliketoknow'
};
remove('password', user); //» { username: 'blakek' }
remove('property.does.not.exist', user);
//» { username: 'blakek' } (same object from previous line)
const removePassword = createRemove('password');
removePassword({ username: 'bob', password: 'laskjfl' }); //» { username: 'bob' }
set 编号 : createSetter
在路径上设置一个值并返回对象.
说明: set() 修改通过的对象而不是创建副本. 若为
您宁愿返回新对象 :
- 使用情况
clone()在此之前set() - 考虑另一种解决办法(不变 真的很不错)
function set(value: any, path: Path, object: any): any;
function createSetter(path: Path, object: any): (value: any) => any;
const user = {
profile: {
bgColor: '#639'
}
};
set('tomato', 'profile.bgColor', user); //» { profile: { bgColor: 'tomato' } }
set('/images/user.png', 'profile.bgImage', user);
//» { profile: { bgColor: 'tomato', bgImage: '/images/user.png' } }
const logout = set(null, 'profile');
logout(user); //» { profile: null }
const setUsername = createSetter('username', user);
setUsername('blakek'); //» { profile: { bgColor: 'tomato', bgImage: '/images/user.png' }, username: 'blakek' }
捐款
节点.js 财务报告和审定财务报表 雅伦 要求与该项目合作.
要安装所有依赖, 运行 :
yarn
有用的命令
yarn build | 将工程构建为 ./dist |
yarn format | 按照 Pretier 样式格式化源 |
yarn test | 运行项目测试 |
yarn test --watch | 运行工程测试, 监视文件更改 |
许可证
麻省理工学院