yu.to
v1.0.3
Published
js data simple format
Downloads
7
Maintainers
Readme
前言:yu.to是一个快速处理对象数据,数组数据的简单库,直接支持es5,同时也支持es6,支持功能拓展,扁平化,无嵌套的配置,容易上手和使用。
一、快速上手
安装
npm install --save yu.to
使用
主要应对分页数据的快速处理
var to = require('yu.to')
var response = {
'currentPage': 1,
'pageSize': 10,
'totalNum': 3,
'data': [
{
'id': 21,
'userRemark': null,
'receiverPhone': '16657100261',
'receiver': '杜乐平',
'status': 1,
'type': '0',
'dispatchTime': null,
'createTime': 1560506022000,
'updateTime': 1560506022000,
'productOrders': [
{
'id': 63,
'productName': '华为华为',
'unitPrice': 10,
'quantity': 1,
'type': 'ORDER',
'status': 'SUCCESS',
}
]
}
]
}
to(response.data, {
userRemark: 'default',
receiver: 'prepend:姓名:',
status: 'copy:statusLabel',
statusLabel: 'enum:失败,成功',
dispatchTime: 'date',
createTime: 'date:yyyy-MM-dd',
updateTime: 'date',
'productOrders.unitPrice': 'append:元',
'productOrders.type': 'compare:ORDER',
'productOrders.status': 'compare:SUCCESS?成功:失败',
})
console.log(response.data)
// ************* 处理后输出结果 *************
/*
[
{ id: 21,
userRemark: '/',
receiverPhone: '16657100261',
receiver: '姓名:杜乐平',
status: 1,
type: '0',
dispatchTime: '/',
createTime: '2019-06-14',
updateTime: '2019-06-14 17:53:42',
productOrders: [
{
id: 63,
productName: '华为华为',
unitPrice: '10元',
quantity: 1,
type: true,
status: '成功',
}
],
statusLabel: '成功'
}
]
*/
二、配置参数
| 配置 | 配置说明 | 参数 | 默认参数 | 备注 | | --------- | ------------------------ | -------------------------------------- | ------------------- | --------------------------------- | | rename | 重命名属性 | 重命名后的名称 | - | 参数必填,原属性删除 | | copy | 复制属性 | 复制后的名称 | - | 参数必填,原属性保留 | | default | 设置默认值 | 默认字符串 | '/' | - | | string | 转成字符串 | - | - | - | | number | 转成数字 | - | - | - | | boolean | 转成布尔值 | - | - | - | | date | 时间戳转日期 | 时间转换格式 yyyy-MM-dd hh:mm:ss.SSS | yyyy-MM-dd hh:mm:ss | 时间戳为null时,返回默认字符串'/' | | timestamp | 日期转时间戳 | 时间转换格式 yyyy-MM-dd hh:mm:ss.SSS | yyyy-MM-dd hh:mm:ss | 日期为null时,返回默认字符串'/' | | compare | 比较判断得布尔值或字符串 | 比较的字符串或比较的字符加三元运算的值 | - | - | | prepend | 在内容前添加字符串 | 字符串 | - | - | | append | 在内容后添加字符串 | 字符串 | - | - | | enum | 数组枚举转换 | 以','分隔的字符串 | - | 参数必填 | | mapping | 对象枚举转换 | 以'&'和','分隔的字符串 | - | 参数必填 | | array | 字符串转数组 | 分隔符号 | 逗号',' | - |
三、使用示例
重命名属性
var obj = { name: 'mack' }
to(obj, {
name: 'rename:myname',
})
// {myname: 'mack'}
基础类型转换
var obj = {
age: 23,
money: '123.23',
love: 'yes',
}
to(obj, {
age: 'string',
money: 'number',
love: 'boolean'
})
// { age:'23', money: 123.23, love: true }
时间戳转日期
var obj = {
birthday: 1560827789638,
createdAt: 1560827789638
}
to(obj, {
birthday: 'date',
createdAt: 'date:yyyy-MM-dd'
})
// {birthday: '2019-06-18 11:16:29', createdAt: '2019-06-18'}
比较判断,得到布尔值或赋值
var obj = {
status: 'SUCCESS',
type: 'order',
}
to(obj, {
status: 'compare:SUCCESS',
type: 'compare:order?交易:购买',
})
// {status: true, type: '交易'}
日期转时间戳
var obj = {
birthday: '2019-06-18 11:16:29',
createdAt: '2019-06-18'
}
to(obj, {
birthday: 'timestamp',
createdAt: 'timestamp:yyyy-MM-dd'
})
// {birthday: 1560827789000, createdAt: 1560787200000}
在内容前添加字符串
var obj = {
name: '王小明',
}
to(obj, {
name: 'prepend:姓名:',
})
// {name: '姓名:王小明'}
在内容后添加字符串
var obj = {
money: 3.25,
}
to(obj, {
money: 'append:元',
})
// {money: '3.25元'}
枚举转换
var obj = {
status: 1, // 0 不健康 1 健康
}
to(obj, {
status: 'enum:不健康,健康',
})
// {status: '健康'}
枚举对象转换
var obj = {
status: 'health', // 0 不健康 1 健康
}
to(obj, {
status: {mapping: 'unHealth:不健康,health:健康'},
})
// {status: '健康'}
属性复制
var obj = {
status: 1, // 0 不健康 1 健康
}
to(obj, {
status: 'copy:statusLabel',
})
// {status: 1, statusLabel: 1}
属性复制后,再枚举
var obj = {
status: 1, // 0 不健康 1 健康
}
to(obj, {
status: 'copy:statusLabel',
statusLabel: 'enum:不健康,健康',
})
// {status: 1, statusLabel:'健康'}
字符串转数组
var obj = {
words: 'a,b,c',
words2: 'a|b|c'
}
to(obj, {
words: 'array',
words2: 'array:|',
})
// ['a','b','c'] ['a','b','c']
null转默认值
var obj = {
words: null,
words2: null,
}
to(obj, {
words: 'default',
words2: 'default:-',
})
// {words: '/', words2: '-'}
处理数组对象
可无视数组,直接把数组当作对象处理(内部会自动判断并循环处理)
var objArray = [
{
name: 'mack',
age: 23,
birthday: 1560827789638,
status: 1, // 0 不健康 1 健康
},
{
name: 'cindy',
age: 21,
birthday: 1560827789638,
status: 0, // 0 不健康 1 健康
},
]
to(objArray, {
status: 'enum:不健康,健康',
})
// expect(objArray[0].status).toBe('健康')
// expect(objArray[1].status).toBe('不健康')
四、多层嵌套属性,多层属性数组处理
多层嵌套属性
var obj = {
father: {
child: {
name: 'tom'
}
}
}
to(obj, {
'father.child.name': 'rename:myname',
})
/*
{
father: {
child: {
myname: 'tom'
}
}
}
*/
多层属性数组处理
直接将数组视为一个对象处理,内部会自动判断是否为数组并循环处理
var obj = {
father: {
child: {
family: [
{ name: 'tom', status: 1},
{ name: 'cindy', status: 1},
{ name: 'bob', status: 0},
]
}
}
}
to(obj, {
'father.child.family.status': {enum: '健康,不健康'},
})
// obj.father.child.family[1].status === '不健康'
option支持函数重点功能
var obj = {
myname: 'mack',
}
to(obj, {
myname: function (source) {
return source + ' wang'
}
})
expect(obj.myname).toBe('mack wang')
五、自定义拓展配置参数
多次调用 to.extend() 方法会以merge的形式合并拓展配置参数
to.extend({
addOne: function (source, key, configValue) {
source[key] = Number(source[key]) + 1
}
})
var obj = {
status: '1',
}
to(obj, {
status: 'addOne'
}
// {status: 2}
六、配置参数数组
注意:如果配置参数是一个数组,则他只会作用于当前的属性,会按配置参数数组中的顺序处理
var obj = {
status: 1, // 0 不健康 1 健康
}
to(obj, {
status: [{copy: 'statusLabel'}, {enum: ['不健康', '健康']}]
}
expect(obj.status).toBe('健康')
七、配置参数支持多种数据类型
字符串型单个配置(最简单的使用)
var obj = { status: 1 }
to(obj, 'status:string')
// {status: '1'}
字符串型配置(以&符号分隔)
var obj = { status: 1 }
to(obj, 'status:rename:statusLabel&statusLabel:enum:不健康,健康')
// {statusLabel: '健康'}
没有值的,一律不支持对象型配置,比如string,number,boolean
对象型单个配置(值为字符串)
var obj = { status: 1 }
to(obj, {
status: 'enum:不健康,健康'
})
// {status: '健康'}
对象型多个配置(值为字符串)
var obj = { status: 1 }
to(obj, {
status: 'rename:statusLabel',
statusLabel: 'enum:不健康,健康'
})
// {statusLabel:'健康'}
对象型单个配置(值为对象,值的值为字符串)
var obj = { status: 1 }
to(obj, {
status: {enum: '不健康,健康'}
})
// {status: '健康'}
对象型多个配置(值为对象,值的值为字符串)
var obj = { status: 1 }
to(obj, {
status: {rename: 'statusLabel'},
statusLabel: {enum: '不健康,健康'}
})
// {statusLabel: '健康'}
对象型单个配置(值为对象,值的值为对象)
var obj = { status: 'health' }
to(obj, {
status: {mapping: {unHealth: '不健康', health: '健康'}},
})
// {status: '健康'}
对象型单个配置(值为对象,值的值为对象,值有多个属性)
var obj = {
status: 1, // 0 不健康 1 健康
}
to(obj, {
status: {copy: 'statusLabel', enum: '不健康,健康'},
})
expect(obj.statusLabel).toBe(1)
expect(obj.status).toBe('健康')
对象型多个配置(值为对象,值的值为对象)
var obj = { status: 'health' }
to(obj, {
status: {rename: 'statusLabel'},
statusLabel: {mapping: {unHealth: '不健康', health: '健康'}},
})
// {statusLabel: '健康'}
开发日志
2019.07.12 v1.0.2
- update: 增加option对函数的支持,和对象参数允许有多个属性