complex-utils-next
Advanced tools
| import getPropByList from './getPropByList' | ||
| /** | ||
| * 根据'mainprop.prop'格式字符串获取对象值 | ||
| * @param {object} value 对应对象 | ||
| * @param {string} prop 对应属性 | ||
| * @param {boolean} [intervalRepeat] 分隔符.重复判断值, 默认为否;为真时连续.会全部删除,为否时连续和开始结束分隔符会保留,此时.视为属性,.a直接取[.a],a..b取[.a][.b],理论上无法对[a.]取值 | ||
| * @param {boolean} [showError] 显示错误输出 | ||
| * @returns | ||
| */ | ||
| function getComplexProp(value: undefined | Record<PropertyKey, unknown>, prop: string, intervalRepeat = false, showError?: boolean) { | ||
| if (!value || !prop) { | ||
| return undefined | ||
| } else { | ||
| const interval = '.' | ||
| const originPropList = prop.split(interval) | ||
| const propList = [] | ||
| let lastEmpty = 0 | ||
| for (let n = 0; n < originPropList.length; n++) { | ||
| let originProp = originPropList[n] | ||
| if (originProp) { | ||
| if (lastEmpty && !intervalRepeat) { | ||
| originProp = interval.repeat(lastEmpty) + originProp | ||
| lastEmpty = 0 | ||
| } | ||
| propList.push(originProp) | ||
| } else { | ||
| lastEmpty++ | ||
| } | ||
| } | ||
| if (lastEmpty) { | ||
| propList.push(interval.repeat(lastEmpty)) | ||
| } | ||
| return getPropByList(value, propList, showError) | ||
| } | ||
| } | ||
| export default getComplexProp |
| import setPropByList from './setPropByList' | ||
| /** | ||
| * 根据a.b字符串设置属性 | ||
| * @param {*} targetData 对应对象 | ||
| * @param {string} prop 属性字符串a.b,,父属性不存在时会创建对象 | ||
| * @param {*} value 属性值 | ||
| * @param {boolean} [useSetData] 为真时通过setData进行赋值操作,主要针对框架中直接赋值无法响应的操作 | ||
| * @returns {boolean} 设置是否成功 | ||
| */ | ||
| function setComplexProp(targetData: Record<PropertyKey, unknown>, prop: string, value: unknown, useSetData?: boolean) { | ||
| if (!targetData || !prop) { | ||
| return false | ||
| } else { | ||
| const propList = prop != '.' ? prop.split('.') : [prop] | ||
| setPropByList(targetData, propList, value, useSetData) | ||
| return true | ||
| } | ||
| } | ||
| export default setComplexProp |
+4
-0
@@ -7,1 +7,5 @@ | ||
| - 添加observe/reactive模块 | ||
| ### 2.0.4 | ||
| - 简化setProp/getProp函数 | ||
| - 添加setComplexProp/getComplexProp函数 |
+4
-0
@@ -34,2 +34,3 @@ // class加载 | ||
| import getProp from './src/object/getProp' | ||
| import getComplexProp from './src/object/getComplexProp' | ||
| import getPropByList from './src/object/getPropByList' | ||
@@ -42,2 +43,3 @@ import hasProp from './src/object/hasProp' | ||
| import setProp from './src/object/setProp' | ||
| import setComplexProp from './src/object/setComplexProp' | ||
| import setPropByList from './src/object/setPropByList' | ||
@@ -145,2 +147,3 @@ import setPropByType from './src/object/setPropByType' | ||
| getProp, | ||
| getComplexProp, | ||
| getPropByList, | ||
@@ -153,2 +156,3 @@ hasProp, | ||
| setProp, | ||
| setComplexProp, | ||
| setPropByList, | ||
@@ -155,0 +159,0 @@ setPropByType, |
+1
-1
| { | ||
| "name": "complex-utils-next", | ||
| "version": "2.0.3", | ||
| "version": "2.0.4", | ||
| "description": "a complex utils", | ||
@@ -5,0 +5,0 @@ "main": "index.ts", |
| import getPropByList from './getPropByList' | ||
| /** | ||
| * 根据'mainprop.prop'格式字符串获取对象值 | ||
| * 根据'mainprop.prop'格式字符串获取对象值 // 此函数认为targetData和prop必然存在,不做单独校验 | ||
| * @param {object} value 对应对象 | ||
| * @param {string} prop 对应属性 | ||
| * @param {boolean} [intervalRepeat] 分隔符.重复判断值, 默认为否;为真时连续.会全部删除,为否时连续和开始结束分隔符会保留,此时.视为属性,.a直接取[.a],a..b取[.a][.b],理论上无法对[a.]取值 | ||
| * @param {boolean} [showError] 显示错误输出 | ||
| * @returns | ||
| */ | ||
| // eslint-disable-next-line @typescript-eslint/no-explicit-any | ||
| function getProp(value: undefined | Record<PropertyKey, any>, prop: string, intervalRepeat = false, showError?: boolean) { | ||
| if (!value || !prop) { | ||
| return undefined | ||
| } else { | ||
| const interval = '.' | ||
| const originPropList = prop.split(interval) | ||
| const propList = [] | ||
| let lastEmpty = 0 | ||
| for (let n = 0; n < originPropList.length; n++) { | ||
| let originProp = originPropList[n] | ||
| if (originProp) { | ||
| if (lastEmpty && !intervalRepeat) { | ||
| originProp = interval.repeat(lastEmpty) + originProp | ||
| lastEmpty = 0 | ||
| } | ||
| propList.push(originProp) | ||
| } else { | ||
| lastEmpty++ | ||
| } | ||
| } | ||
| if (lastEmpty) { | ||
| propList.push(interval.repeat(lastEmpty)) | ||
| } | ||
| return getPropByList(value, propList, showError) | ||
| } | ||
| function getProp(value: Record<PropertyKey, unknown>, prop: string, showError?: boolean) { | ||
| const propList = prop.indexOf('.') > -1 ? prop.split('.') : [prop] | ||
| return getPropByList(value, propList, showError) | ||
| } | ||
| export default getProp |
@@ -1,2 +0,2 @@ | ||
| /* eslint-disable @typescript-eslint/no-explicit-any */ | ||
| /** | ||
@@ -9,3 +9,3 @@ * 根据属性列表获取对象属性 | ||
| */ | ||
| function getPropByList(value: Record<PropertyKey, any>, propList: string[] | number[], showError?: boolean): any { | ||
| function getPropByList(value: Record<PropertyKey, unknown>, propList: string[] | number[], showError?: boolean): unknown { | ||
| let data = value | ||
@@ -16,3 +16,3 @@ try { | ||
| if (prop || prop === 0) { | ||
| data = data[prop] | ||
| data = data[prop] as Record<PropertyKey, unknown> | ||
| } | ||
@@ -19,0 +19,0 @@ } |
@@ -1,6 +0,5 @@ | ||
| /* eslint-disable @typescript-eslint/no-explicit-any */ | ||
| import setPropByList from './setPropByList' | ||
| /** | ||
| * 根据a.b字符串设置属性 | ||
| * 根据a.b字符串设置属性 // 此函数认为targetData和prop必然存在,不做单独校验 | ||
| * @param {*} targetData 对应对象 | ||
@@ -12,12 +11,8 @@ * @param {string} prop 属性字符串a.b,,父属性不存在时会创建对象 | ||
| */ | ||
| function setProp(targetData: Record<PropertyKey, any>, prop: string, value: any, useSetData?: boolean) { | ||
| if (!targetData || !prop) { | ||
| return false | ||
| } else { | ||
| const propList = prop != '.' ? prop.split('.') : [prop] | ||
| setPropByList(targetData, propList, value, useSetData) | ||
| return true | ||
| } | ||
| function setProp(targetData: Record<PropertyKey, unknown>, prop: string, value: unknown, useSetData?: boolean) { | ||
| const propList = prop.indexOf('.') > -1 ? prop.split('.') : [prop] | ||
| setPropByList(targetData, propList, value, useSetData) | ||
| return true | ||
| } | ||
| export default setProp |
@@ -1,2 +0,1 @@ | ||
| /* eslint-disable @typescript-eslint/no-explicit-any */ | ||
| import config from '../../config' | ||
@@ -11,3 +10,3 @@ | ||
| */ | ||
| function setPropByList(targetData: Record<PropertyKey, any>, propList: string[], value: any, useSetData?: boolean) { | ||
| function setPropByList(targetData: Record<PropertyKey, unknown>, propList: string[], value: unknown, useSetData?: boolean) { | ||
| let data = targetData | ||
@@ -17,5 +16,5 @@ for (let n = 0; n < propList.length; n++) { | ||
| if (!data[propList[n]]) { | ||
| data[propList[n]] = {} | ||
| data[propList[n]] = {} as Record<PropertyKey, unknown> | ||
| } | ||
| data = data[propList[n]] | ||
| data = data[propList[n]] as Record<PropertyKey, unknown> | ||
| } else { | ||
@@ -22,0 +21,0 @@ if (!useSetData) { |
100737
1.51%96
2.13%2990
0.95%