ofliterjsJavascript 数据对象过滤处理库
在开发中经常需要组装数据向API提交,或者从API响应数据过滤显示,这时 ofliterjs 库能快速解决数据处理问题。
OfilterJs 是一个用于 Javascript 的数据对象{}过滤处理器,为开发提供更简单、便捷、高效的数据处理操作。
相关连接
- Github:https://github.com/wenlng/ofilter-js
- Gitee:https://gitee.com/wenlng/ofilter-js
- NpmJs:https://www.npmjs.com/package/ofilterjs
支持语言
- Javascript
- TypeScript
功能
- 🍑 filterValue 过滤数据
- 🍐 getValue 读取数据
- 🍎 resetValue 重置数据
安装模块
$ npm i ofilterjs
或其他 pnpm、cnpm、yarn ...
$ pnpm i ofilterjs
引入模块
import ofjs from 'ofilterjs'
// const ofjs = require('ofilterjs')
一、数据过滤
filterValue([数据对象], [配置项], ...[扩展数据])
1.1 过滤/重组数据
const data = {
lib: {
pkg: {
name: 'ofilterjs',
alias: '',
version_number: 10001
}
}
}
const newData = ofjs.filterValue(data, {
name: 'lib.pkg.name',
versionNumber: 'lib.pkg.version_number',
})
console.log(newData)
/** 结果
newData = {
name: 'ofilterjs',
versionNumber: 10001
}
*/
1.2 直接指定值
const data = {
lib: {
pkg: {
name: 'ofilterjs',
alias: '',
version_number: 10001
}
}
}
const newData = ofjs.filterValue(data, {
name: 'lib.pkg.name',
type: {
value: 'type value'
}
})
console.log(newData)
/** 结果
newData = {
name: 'ofilterjs',
type: 'type value'
}
*/
1.3 设置默认值
const data = {
lib: {
pkg: {
name: 'ofilterjs',
alias: '',
version_number: 10001
}
}
}
const newData = ofjs.filterValue(data, {
name: 'lib.pkg.name',
alias: {
key: 'lib.pkg.alias',
default: 'Default alias'
},
type: {
key: 'lib.pkg.type',
default: 'Npm pkg'
}
})
console.log(newData)
/** 结果
newData = {
name: 'ofilterjs',
alias: 'Default alias',
type: 'Npm pkg'
}
*/
1.4 自定义过滤回调
const data = {
lib: {
pkg: {
name: 'ofilterjs',
alias: '',
version_number: 10001
}
}
}
const newData = ofjs.filterValue(data, {
name: 'lib.pkg.name',
alias: {
key: 'lib.pkg.alias',
filter: (value, source) => {
if (value !== '') return value
return 'This is ' + (source?.lib?.pkg?.name || 'unknown')
}
},
type: {
key: 'lib.pkg.type',
filter: (value, source) => {
return 'Filter npm'
}
}
})
console.log(newData)
/** 结果
newData = {
name: 'ofilterjs',
alias: 'This is ofilterjs',
type: 'Filter npm'
}
*/
1.5 合并到结果集
const data = {
lib: {
pkg: {
name: 'ofilterjs',
alias: '',
version_number: 10001
}
}
}
const newData = ofjs.filterValue(data, {
name: 'lib.pkg.name',
_: {
merge: true,
filter: (_, source) => {
if (source?.lib?.pkg?.name === 'ofilterjs') {
return {
support: ['js', 'ts', 'es']
}
}
return {}
}
},
_1: {
merge: true,
filter: (_, source) => {
return { more: 'more data ...' }
}
},
}
})
console.log(newData)
/** 结果
newData = {
name: 'ofilterjs',
support: ['js', 'ts', 'es'],
more: 'more data ...'
}
*/
1.6 合并扩展数据
const data = {
lib: {
pkg: {
name: 'ofilterjs',
alias: '',
version_number: 10001
}
}
}
const newData = ofjs.filterValue(data, {
name: 'lib.pkg.name'
}
}, {
name1: 'ofilter'
}, {
name2: 'object filter'
})
console.log(newData)
/** 结果
newData = {
name: 'ofilterjs',
name1: 'ofilter',
name2: 'object filter'
}
*/
二、数据读取
getValue([名称访问字符串], [默认值])
2.1 值读取 / 深度读取
const data = {
lib: {
pkg: {
name: 'ofilterjs',
version: 10001
},
support: ['js', 'ts', 'es']
}
}
// 原始方式
const name = data && data['lib'] && data['lib']['name'] && data['lib']['pkg']['name'] || 'unknown'
console.log(name) // ofilterjs
// es6的 ?. 方式
const name = data?.lib?.pkg?.name || 'unknown'
console.log(name) // ofilterjs
// 使用 ofilterjs 方式
const name = ofjs.getValue(data, 'lib.pkg.name', 'unknown')
console.log(name) // ofilterjs
2.2 优先读取值
const data = {
lib: {
pkg: {
name: 'ofilterjs',
alias: '',
version: 10001
},
support: ['js', 'ts', 'es']
}
}
// 原始方式
const currnet = data && data['lib'] && data['lib']['pkg'] || {}
const alias = currnet['alias'] || currnet['name'] || 'unknown'
console.log(alias) // ofilterjs
// es6的 ?. 方式
const alias = data?.lib?.pkg?.alias || data?.lib?.pkg?.name || 'unknown'
console.log(alias) // ofilterjs
// 使用 ofilterjs 方式
const alias = ofjs.getValue(data, 'lib.pkg.alias|lib.pkg.name', 'unknown')
console.log(name) // ofilterjs
2.3 数组索引下标读取
const data = {
lib: {
pkg: {
name: 'ofilterjs',
alias: '',
version: 10001
},
support: ['js', 'ts', 'es']
}
}
// 原始方式
const support = data && data['lib'] && data['lib']['support'] || {}
const su = support[0] || 'unknown'
console.log(su) // js
// es6的 ?. 方式
const su = data?.lib?.support?.[0] || 'unknown'
console.log(su) // js
// 使用 ofilterjs 方式
const su = ofjs.getValue(data, 'lib.support.0', 'unknown')
console.log(su) // js
三、数据重置
resetValue([数据对象], [配置,可选])
Tip: 默认情况下属性名带有 '_' 前缀的将不会参与自动重置,但可以使用手动配置指定.
3.1 自动识别值类型重置值
浅重置(第一层有效)
const data = {
lib: {
pkg: {
name: 'ofilterjs',
alias: '',
version: 10001
},
support: ['js', 'ts', 'es'],
_private: 'private attr'
},
lib2: {
pkg: {}
}
}
ofjs.resetValue(data, false)
/** 结果
const data = {
lib: {},
lib2: {}
}
*/
深重置(默认所有层有效)
const data = {
lib: {
pkg: {
name: 'ofilterjs',
alias: '',
version: 10001
},
support: ['js', 'ts', 'es'],
_private: 'private attr'
},
lib2 : {
pkg: {
name: 'ofilter'
}
}
}
ofjs.resetValue(data, true)
/** 结果
const data = {
lib: {
pkg: {
name: '',
alias: '',
version: 0
},
support: [],
_private: 'private attr'
},
lib2 : {
pkg: {
name: ''
}
}
}
*/
深重置 - 指定深度层数,不指定起始位置(默认从0开始)
const data = {
// 0层
name: 'lib_list',
lib: {
// 1层
type: 'npm',
pkg: {
// 2层
name: 'ofilterjs',
alias: '',
version: 10001
},
support: {
'js' : 'javascript',
'ts' : 'typescript'
},
_private: 'private attr'
},
lib2 : {
type: 'npm',
pkg: {
name: 'ofilter'
}
}
}
// 2代表深度为2个层数,表示:0 ~ (0+2),不包含(0+2)
ofjs.resetValue(data, true, 2)
/** 结果
const data = {
// 0层
name: '', // 被重置
lib: {
// 1层
type: '', // 被重置
pkg: {
// 2层
name: 'ofilterjs',
alias: '',
version: 10001
},
support: {
'js' : 'javascript',
'ts' : 'typescript'
},
_private: 'private attr'
},
lib2 : {
type: '', // 被重置
pkg: {
name: 'ofilter'
}
}
}
*/
深重置 - 指定深度层数,也指定起始位置
const data = {
// 0层
name: 'lib_list',
lib: {
// 1层
type: 'npm',
pkg: {
// 2层
name: 'ofilterjs',
alias: '',
version: 10001,
support: {
// 3层
'js' : 'javascript',
'ts' : 'typescript'
}
},
_private: 'private attr'
},
lib2 : {
type: 'npm',
pkg: {
name: 'ofilter'
}
}
}
// 2代表深度为2个层数,表示:1 ~ (1+2),不包含(1+2)
ofjs.resetValue(data, true, 2, 1)
/** 结果
const data = {
// 0层
name: 'lib_list',
lib: {
// 1层
type: '', // 被重置
pkg: {
// 2层
name: '', // 被重置
alias: '', // 被重置
version: 0, // 被重置
support: {
// 3层
'js' : 'javascript',
'ts' : 'typescript'
}
},
_private: 'private attr'
},
lib2 : {
type: '', // 被重置
pkg: {
name: '' // 被重置
}
}
}
*/
3.2 手动指定重置字段
const data = {
lib: {
pkg: {
name: 'ofilterjs',
alias: '',
version: 10001
},
support: ['js', 'ts', 'es'],
_private: 'private attr'
}
}
ofjs.resetValue(data, [
'lib.pkg.name',
'lib.pkg.version',
'lib.pkg._private'
])
/** 结果
const data = {
lib: {
pkg: {
name: '',
alias: '',
version: 0
},
support: ['js', 'ts', 'es'],
_private: ''
}
}
*/
3.3 手动配置字段设置指定的值
const data = {
lib: {
pkg: {
name: 'ofilterjs',
alias: '',
version: 10001
},
support: ['js', 'ts', 'es']
}
}
ofjs.resetValue(data, {
'lib.pkg.name': 'newname',
'lib.pkg.version': 10002
})
/** 结果
const data = {
lib: {
pkg: {
name: 'newname',
alias: '',
version: 10002
},
support: ['js', 'ts', 'es']
}
}
*/
评论