@aimidy/util 1.0.12 → 1.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1 +1,33 @@
1
- hi
1
+ # 小工具
2
+
3
+ ## help
4
+
5
+ ### data_get
6
+
7
+ ### data_set
8
+
9
+ ### deepAssign
10
+
11
+ ### deepClineWithJson
12
+
13
+ ### emptyData
14
+
15
+ ### fieldSorter
16
+
17
+ ### gettype
18
+
19
+ ### head
20
+
21
+ ### parameterMerge
22
+
23
+ ### range
24
+
25
+ ### recursiveDeepCopy
26
+
27
+ ### remove
28
+
29
+ ### searchInStr
30
+
31
+ ### strToConvert
32
+
33
+ ### strToHump
@@ -9,7 +9,7 @@ declare function data_set(data: any, key: string, value: any): any;
9
9
 
10
10
  /**
11
11
  * 獲取資料
12
- * @param data 資料集{key:value}
12
+ * @param data 資料集 {key:value}
13
13
  * @param key 資料對應的位置 app.column.name
14
14
  * @param defaultValue 如果取不到值要給予什麼參數,預設 null
15
15
  * @returns
@@ -17,7 +17,9 @@ declare function data_set(data: any, key: string, value: any): any;
17
17
  * {a:[{b:a},{b:a}]}
18
18
  * a.b = [a,a]
19
19
  */
20
- declare function data_get(data: any, key: string, defaultValue?: any): any;
20
+ declare function data_get<T = any>(data: {
21
+ [key: string]: any;
22
+ } | any[] | null | undefined, key: string, defaultValue?: any): T;
21
23
 
22
24
  /**
23
25
  * 透過遞迴複製物件
@@ -9,7 +9,7 @@ declare function data_set(data: any, key: string, value: any): any;
9
9
 
10
10
  /**
11
11
  * 獲取資料
12
- * @param data 資料集{key:value}
12
+ * @param data 資料集 {key:value}
13
13
  * @param key 資料對應的位置 app.column.name
14
14
  * @param defaultValue 如果取不到值要給予什麼參數,預設 null
15
15
  * @returns
@@ -17,7 +17,9 @@ declare function data_set(data: any, key: string, value: any): any;
17
17
  * {a:[{b:a},{b:a}]}
18
18
  * a.b = [a,a]
19
19
  */
20
- declare function data_get(data: any, key: string, defaultValue?: any): any;
20
+ declare function data_get<T = any>(data: {
21
+ [key: string]: any;
22
+ } | any[] | null | undefined, key: string, defaultValue?: any): T;
21
23
 
22
24
  /**
23
25
  * 透過遞迴複製物件
@@ -42,8 +42,7 @@ module.exports = __toCommonJS(help_exports);
42
42
  function data_set(data, key, value) {
43
43
  const keys = key.split(".");
44
44
  const firstKey = keys.shift();
45
- if (!firstKey)
46
- return data;
45
+ if (!firstKey) return data;
47
46
  if (keys.length < 1) {
48
47
  data[firstKey] = value;
49
48
  return data;
@@ -57,16 +56,11 @@ function data_get(data, key, defaultValue = null) {
57
56
  switch (gettype(data)) {
58
57
  case "object":
59
58
  const coypData = deepCloneWithJson(data);
60
- const keys = key.split(".");
61
- let firstKey = keys.shift();
62
- if (!firstKey)
63
- return defaultValue;
64
- if (!(firstKey in coypData))
65
- return defaultValue;
66
- let rep = coypData[firstKey];
67
- if (keys.length > 0)
68
- rep = data_get(rep, keys.join("."), defaultValue);
69
- return rep != null ? rep : defaultValue;
59
+ const findKey = Object.keys(coypData).find((k) => key.startsWith(k));
60
+ if (!findKey) return defaultValue;
61
+ key = findKey === key ? "" : key.replace(findKey + ".", "");
62
+ if (key === "") return coypData[findKey];
63
+ return data_get(coypData[findKey], key, defaultValue);
70
64
  case "undefined":
71
65
  case "null":
72
66
  return defaultValue;
@@ -137,8 +131,7 @@ function parameterMerge(value1, value2) {
137
131
 
138
132
  // src/help/head/head.ts
139
133
  function head(arr) {
140
- if (gettype(arr) !== "array")
141
- return null;
134
+ if (gettype(arr) !== "array") return null;
142
135
  return arr.length > 0 ? arr[0] : null;
143
136
  }
144
137
 
@@ -149,11 +142,9 @@ function deepCloneWithJson(obj) {
149
142
 
150
143
  // src/help/remove/remove.ts
151
144
  function remove(arr, item) {
152
- if (arr.length === 0)
153
- return [];
145
+ if (arr.length === 0) return [];
154
146
  const index = arr.indexOf(item);
155
- if (index === -1)
156
- return arr;
147
+ if (index === -1) return arr;
157
148
  return [...arr.slice(0, index), ...arr.slice(index + 1)];
158
149
  }
159
150
 
@@ -169,8 +160,7 @@ function strToConvert(str, convert = "_") {
169
160
 
170
161
  // src/help/strToHump/strToHump.ts
171
162
  function strToHump(str) {
172
- if (str.startsWith("_"))
173
- str = str.slice(1);
163
+ if (str.startsWith("_")) str = str.slice(1);
174
164
  return str.replace(/([^_])(?:_+([^_]))/g, function($0, $1, $2) {
175
165
  return $1 + $2.toUpperCase();
176
166
  });
@@ -179,8 +169,7 @@ function strToHump(str) {
179
169
  // src/help/deepAssign/deepAssign.ts
180
170
  function deepAssign(...param) {
181
171
  let temp = param.filter((v) => gettype(v) === "object");
182
- if (temp.length < 1)
183
- return {};
172
+ if (temp.length < 1) return {};
184
173
  let result = Object.assign({}, ...temp);
185
174
  for (let item of temp) {
186
175
  for (const [idx, val] of Object.entries(item)) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/help/index.ts","../../src/help/data_set/data_set.ts","../../src/help/data_get/data_get.ts","../../src/help/recursiveDeepCopy/recursiveDeepCopy.ts","../../src/help/emptyData/emptyData.ts","../../src/help/gettype/gettype.ts","../../src/help/parameterMerge/parameterMerge.ts","../../src/help/head/head.ts","../../src/help/deepCloneWithJson/deepCloneWithJson.ts","../../src/help/remove/remove.ts","../../src/help/searchInStr/searchInStr.ts","../../src/help/strToConvert/strToConvert.ts","../../src/help/strToHump/strToHump.ts","../../src/help/deepAssign/deepAssign.ts","../../src/help/fieldSorter/fieldSorter.ts","../../src/help/range/range.ts"],"sourcesContent":["export * from './data_set/data_set';\r\nexport * from './data_get/data_get';\r\nexport * from './recursiveDeepCopy/recursiveDeepCopy';\r\nexport * from './emptyData/emptyData';\r\nexport * from './gettype/gettype';\r\nexport * from './parameterMerge/parameterMerge';\r\nexport * from './head/head';\r\nexport * from './deepCloneWithJson/deepCloneWithJson';\r\nexport * from './remove/remove';\r\nexport * from './searchInStr/searchInStr';\r\nexport * from './strToConvert/strToConvert';\r\nexport * from './strToHump/strToHump';\r\nexport * from './deepAssign/deepAssign';\r\nexport * from './fieldSorter/fieldSorter';\r\nexport * from \"./range/range\";","/**\r\n * 動態設定多層物件的參數\r\n * @param data 被設定的物件\r\n * @param key 位置\r\n * @param value 參數\r\n * @returns \r\n */\r\nexport function data_set(data: any, key: string, value: any) {\r\n const keys = key.split(\".\");\r\n const firstKey = keys.shift();\r\n if (!firstKey) return data;\r\n\r\n if (keys.length < 1) {\r\n data[firstKey] = value;\r\n return data;\r\n }\r\n\r\n data[firstKey] = data_set({}, keys.join(\".\"), value);\r\n return data;\r\n}","import { deepCloneWithJson, gettype } from \"..\";\r\n\r\n/**\r\n * 獲取資料\r\n * @param data 資料集{key:value}\r\n * @param key 資料對應的位置 app.column.name\r\n * @param defaultValue 如果取不到值要給予什麼參數,預設 null\r\n * @returns\r\n *\r\n * {a:[{b:a},{b:a}]}\r\n * a.b = [a,a]\r\n */\r\nexport function data_get(data: any, key: string, defaultValue: any = null,): any {\r\n switch (gettype(data)) {\r\n case \"object\":\r\n const coypData = deepCloneWithJson(data);\r\n const keys = key.split('.');\r\n let firstKey = keys.shift();\r\n if (!firstKey) return defaultValue;\r\n if (!(firstKey in coypData)) return defaultValue;\r\n\r\n let rep = coypData[firstKey];\r\n if (keys.length > 0)\r\n rep = data_get(rep, keys.join('.'), defaultValue);\r\n\r\n return rep ?? defaultValue;\r\n case 'undefined':\r\n case 'null':\r\n return defaultValue;\r\n case 'array':\r\n return (data as any[]).map((value: any) => data_get(value, key, defaultValue)) as any;\r\n default:\r\n return data;\r\n }\r\n}","/**\r\n* 透過遞迴複製物件\r\n* @param o \r\n* @returns \r\n*/\r\nexport function recursiveDeepCopy<T = any>(o: T): T {\r\n switch (Object.prototype.toString.apply(o)) {\r\n case \"[object Array]\":\r\n const tempArry: any = [];\r\n (o as Array<any>).forEach(value => {\r\n (tempArry as Array<any>).push(recursiveDeepCopy(value));\r\n })\r\n return tempArry;\r\n case \"[object Object]\":\r\n const tempO: any = {};\r\n Object.keys(o as Object).forEach(key => {\r\n if (Object.prototype.hasOwnProperty.call(o, key))\r\n tempO[key] = recursiveDeepCopy((o as { [_: string]: any })[key]);\r\n })\r\n return tempO;\r\n default:\r\n return o;\r\n }\r\n}","/**\r\n * 判斷資料是否為空值\r\n * @param data \r\n * @returns \r\n */\r\nexport function emptyData(data: any) {\r\n return typeof data === \"undefined\" || data === null\r\n}","/**\r\n * 回傳物體的型態\r\n * @param obj \r\n * @returns \r\n */\r\nexport function gettype<T = any>(obj: T) {\r\n switch (true) {\r\n case obj instanceof Array:\r\n return 'array';\r\n case obj instanceof Date:\r\n return 'date';\r\n case obj === null:\r\n return 'null';\r\n default:\r\n return typeof obj;\r\n }\r\n}","import { gettype, recursiveDeepCopy } from \"..\";\r\n\r\n/**\r\n * 兩個參數的合併(只能是物件或者陣列)\r\n * 如果是空值就回傳空物件\r\n * @param value1 \r\n * @param value2 \r\n * @returns \r\n */\r\nexport function parameterMerge(value1?: any, value2?: any) {\r\n const type1 = gettype(value1);\r\n const type2 = gettype(value2);\r\n\r\n switch (true) {\r\n case (type1 === \"undefined\" || type1 === \"null\") && !!value2:\r\n return value2;\r\n case (type2 === \"undefined\" || type2 === \"null\") && !!value1:\r\n return value1;\r\n case type1 === \"array\" && type1 === type2:\r\n return [...value1, ...value2];\r\n case type1 === \"object\" && type1 === type2:\r\n return Object.assign(recursiveDeepCopy(value1), value2);\r\n default:\r\n return {};\r\n }\r\n}","import { gettype } from \"..\";\r\n\r\n/**\r\n * 回傳物件的第一個值或者空值\r\n * @param arr\r\n * @returns\r\n */\r\nexport function head<T = any>(arr: Array<T>): T | null {\r\n if (gettype(arr) !== 'array') return null;\r\n return arr.length > 0 ? arr[0] : null;\r\n}\r\n\r\n\r\n","/**\r\n * 透過 JSON 複製物件\r\n * @param obj 要複製的物件\r\n * @returns\r\n */\r\nexport function deepCloneWithJson<T>(obj: T) {\r\n return JSON.parse(JSON.stringify(obj));\r\n }\r\n ","type TremoveValeu = string | number\r\n\r\n/**\r\n * 移除陣列某一個位置的值\r\n * @param arr 陣列\r\n * @param item 要移除的值\r\n * @returns\r\n */\r\nexport function remove(arr: TremoveValeu[], item: TremoveValeu) {\r\n if (arr.length === 0) return [];\r\n\r\n const index = arr.indexOf(item);\r\n if (index === -1) return arr;\r\n\r\n return [...arr.slice(0, index), ...arr.slice(index + 1)];\r\n}","/**\r\n * 尋找字串內是否有符合的值,並移除後回傳結果\r\n * @param str 字串\r\n * @param key 要搜尋的文字\r\n * @returns [boolean,string]\r\n */\r\nexport function searchInStr(str: string, key: string): [boolean, string] {\r\n return str.indexOf(key) === -1 ? [false, str] : [true, str.replace(key, '')];\r\n}","/**\r\n * 駝峰轉小寫+convert(default:底線)\r\n * @param str\r\n * @returns\r\n */\r\nexport function strToConvert(str: string, convert: string = \"_\") {\r\n return str.replace(/\\B([A-Z])/g, `${convert}$1`).toLowerCase();\r\n}","/**\r\n * 底線轉駝峰\r\n * @param str\r\n * @returns\r\n */\r\nexport function strToHump(str: string) {\r\n if (str.startsWith('_')) str = str.slice(1);\r\n\r\n return str.replace(/([^_])(?:_+([^_]))/g, function ($0, $1, $2) {\r\n return $1 + $2.toUpperCase();\r\n });\r\n}","import { gettype } from \"../gettype/gettype\";\r\n\r\n/**\r\n * 物件深度合併\r\n * @param target\r\n * @param sources\r\n * @returns\r\n */\r\nexport function deepAssign(...param: ({ [_: string]: any } | undefined)[]) {\r\n let temp: any[] = param.filter(v => gettype(v) === \"object\")\r\n if (temp.length < 1) return {};\r\n \r\n let result = Object.assign({}, ...temp);\r\n\r\n for (let item of temp) {\r\n for (const [idx, val] of Object.entries<any>(item)) {\r\n if (gettype(val) === \"object\") {\r\n result[idx] = deepAssign(result[idx], val);\r\n }\r\n }\r\n }\r\n return result;\r\n}\r\n","/**\r\n * 多欄位排序\r\n * @param sort \r\n * @returns \r\n */\r\nexport function fieldSorter(sort: {\r\n isDesc?: boolean,\r\n fields: {\r\n key: string,\r\n isNumber?: boolean,\r\n isDesc?: boolean\r\n }[]\r\n}) {\r\n return (a: { [_: string]: any }, b: { [_: string]: any }) => {\r\n const data = sort.fields\r\n .map(filed => {\r\n let dir = 1;\r\n if (filed.isDesc) {\r\n dir = -1;\r\n }\r\n\r\n let valueA = a[filed.key];\r\n let valueB = b[filed.key];\r\n\r\n if (!valueA || !valueB)\r\n return 0;\r\n\r\n if (filed.isNumber) {\r\n valueA = Number(valueA);\r\n valueB = Number(valueB);\r\n\r\n if (Number.isNaN(valueA) || Number.isNaN(valueB))\r\n return 0\r\n }\r\n\r\n return valueA > valueB ? dir : valueA < valueB ? -(dir) : 0;\r\n }).reduce((p, n) => p ? p : n, 0);\r\n\r\n if (sort.isDesc)\r\n data * -1;\r\n\r\n return data;\r\n };\r\n};","/**\r\n * 取得區間的數值\r\n * @param start 開始時間\r\n * @param stop 結束時間\r\n * @param step 間隔\r\n * @returns \r\n */\r\nexport function range(start: number, stop: number, step: number) {\r\n const range = { length: (stop - start) / step + 1 };\r\n\r\n return Array.from(range, (_, i) => start + (i * step));\r\n};"],"mappings":"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","names":["range"]}
1
+ {"version":3,"sources":["../../src/help/index.ts","../../src/help/data_set/data_set.ts","../../src/help/data_get/data_get.ts","../../src/help/recursiveDeepCopy/recursiveDeepCopy.ts","../../src/help/emptyData/emptyData.ts","../../src/help/gettype/gettype.ts","../../src/help/parameterMerge/parameterMerge.ts","../../src/help/head/head.ts","../../src/help/deepCloneWithJson/deepCloneWithJson.ts","../../src/help/remove/remove.ts","../../src/help/searchInStr/searchInStr.ts","../../src/help/strToConvert/strToConvert.ts","../../src/help/strToHump/strToHump.ts","../../src/help/deepAssign/deepAssign.ts","../../src/help/fieldSorter/fieldSorter.ts","../../src/help/range/range.ts"],"sourcesContent":["export * from './data_set/data_set';\r\nexport * from './data_get/data_get';\r\nexport * from './recursiveDeepCopy/recursiveDeepCopy';\r\nexport * from './emptyData/emptyData';\r\nexport * from './gettype/gettype';\r\nexport * from './parameterMerge/parameterMerge';\r\nexport * from './head/head';\r\nexport * from './deepCloneWithJson/deepCloneWithJson';\r\nexport * from './remove/remove';\r\nexport * from './searchInStr/searchInStr';\r\nexport * from './strToConvert/strToConvert';\r\nexport * from './strToHump/strToHump';\r\nexport * from './deepAssign/deepAssign';\r\nexport * from './fieldSorter/fieldSorter';\r\nexport * from \"./range/range\";","/**\r\n * 動態設定多層物件的參數\r\n * @param data 被設定的物件\r\n * @param key 位置\r\n * @param value 參數\r\n * @returns \r\n */\r\nexport function data_set(data: any, key: string, value: any) {\r\n const keys = key.split(\".\");\r\n const firstKey = keys.shift();\r\n if (!firstKey) return data;\r\n\r\n if (keys.length < 1) {\r\n data[firstKey] = value;\r\n return data;\r\n }\r\n\r\n data[firstKey] = data_set({}, keys.join(\".\"), value);\r\n return data;\r\n}","import { deepCloneWithJson, gettype } from \"..\";\r\n\r\n/**\r\n * 獲取資料\r\n * @param data 資料集 {key:value} \r\n * @param key 資料對應的位置 app.column.name\r\n * @param defaultValue 如果取不到值要給予什麼參數,預設 null\r\n * @returns\r\n *\r\n * {a:[{b:a},{b:a}]}\r\n * a.b = [a,a]\r\n */\r\nexport function data_get<T = any>(data: { [key: string]: any } | any[] | null | undefined, key: string, defaultValue: any = null,): T {\r\n switch (gettype(data)) {\r\n case \"object\":\r\n const coypData = deepCloneWithJson(data);\r\n const findKey = Object.keys(coypData).find((k) => key.startsWith(k));\r\n if (!findKey) return defaultValue;\r\n\r\n key = findKey === key ? '' : key.replace(findKey + '.', '');\r\n if (key === '') return coypData[findKey];\r\n\r\n return data_get(coypData[findKey], key, defaultValue);\r\n\r\n case 'undefined':\r\n case 'null':\r\n return defaultValue;\r\n case 'array':\r\n return (data as any[]).map((value: any) => data_get(value, key, defaultValue)) as any;\r\n default:\r\n return data as any;\r\n }\r\n}","/**\r\n* 透過遞迴複製物件\r\n* @param o \r\n* @returns \r\n*/\r\nexport function recursiveDeepCopy<T = any>(o: T): T {\r\n switch (Object.prototype.toString.apply(o)) {\r\n case \"[object Array]\":\r\n const tempArry: any = [];\r\n (o as Array<any>).forEach(value => {\r\n (tempArry as Array<any>).push(recursiveDeepCopy(value));\r\n })\r\n return tempArry;\r\n case \"[object Object]\":\r\n const tempO: any = {};\r\n Object.keys(o as Object).forEach(key => {\r\n if (Object.prototype.hasOwnProperty.call(o, key))\r\n tempO[key] = recursiveDeepCopy((o as { [_: string]: any })[key]);\r\n })\r\n return tempO;\r\n default:\r\n return o;\r\n }\r\n}","/**\r\n * 判斷資料是否為空值\r\n * @param data \r\n * @returns \r\n */\r\nexport function emptyData(data: any) {\r\n return typeof data === \"undefined\" || data === null\r\n}","/**\r\n * 回傳物體的型態\r\n * @param obj \r\n * @returns \r\n */\r\nexport function gettype<T = any>(obj: T) {\r\n switch (true) {\r\n case obj instanceof Array:\r\n return 'array';\r\n case obj instanceof Date:\r\n return 'date';\r\n case obj === null:\r\n return 'null';\r\n default:\r\n return typeof obj;\r\n }\r\n}","import { gettype, recursiveDeepCopy } from \"..\";\r\n\r\n/**\r\n * 兩個參數的合併(只能是物件或者陣列)\r\n * 如果是空值就回傳空物件\r\n * @param value1 \r\n * @param value2 \r\n * @returns \r\n */\r\nexport function parameterMerge(value1?: any, value2?: any) {\r\n const type1 = gettype(value1);\r\n const type2 = gettype(value2);\r\n\r\n switch (true) {\r\n case (type1 === \"undefined\" || type1 === \"null\") && !!value2:\r\n return value2;\r\n case (type2 === \"undefined\" || type2 === \"null\") && !!value1:\r\n return value1;\r\n case type1 === \"array\" && type1 === type2:\r\n return [...value1, ...value2];\r\n case type1 === \"object\" && type1 === type2:\r\n return Object.assign(recursiveDeepCopy(value1), value2);\r\n default:\r\n return {};\r\n }\r\n}","import { gettype } from \"..\";\r\n\r\n/**\r\n * 回傳物件的第一個值或者空值\r\n * @param arr\r\n * @returns\r\n */\r\nexport function head<T = any>(arr: Array<T>): T | null {\r\n if (gettype(arr) !== 'array') return null;\r\n return arr.length > 0 ? arr[0] : null;\r\n}\r\n\r\n\r\n","/**\r\n * 透過 JSON 複製物件\r\n * @param obj 要複製的物件\r\n * @returns\r\n */\r\nexport function deepCloneWithJson<T>(obj: T) {\r\n return JSON.parse(JSON.stringify(obj));\r\n }\r\n ","type TremoveValeu = string | number\r\n\r\n/**\r\n * 移除陣列某一個位置的值\r\n * @param arr 陣列\r\n * @param item 要移除的值\r\n * @returns\r\n */\r\nexport function remove(arr: TremoveValeu[], item: TremoveValeu) {\r\n if (arr.length === 0) return [];\r\n\r\n const index = arr.indexOf(item);\r\n if (index === -1) return arr;\r\n\r\n return [...arr.slice(0, index), ...arr.slice(index + 1)];\r\n}","/**\r\n * 尋找字串內是否有符合的值,並移除後回傳結果\r\n * @param str 字串\r\n * @param key 要搜尋的文字\r\n * @returns [boolean,string]\r\n */\r\nexport function searchInStr(str: string, key: string): [boolean, string] {\r\n return str.indexOf(key) === -1 ? [false, str] : [true, str.replace(key, '')];\r\n}","/**\r\n * 駝峰轉小寫+convert(default:底線)\r\n * @param str\r\n * @returns\r\n */\r\nexport function strToConvert(str: string, convert: string = \"_\") {\r\n return str.replace(/\\B([A-Z])/g, `${convert}$1`).toLowerCase();\r\n}","/**\r\n * 底線轉駝峰\r\n * @param str\r\n * @returns\r\n */\r\nexport function strToHump(str: string) {\r\n if (str.startsWith('_')) str = str.slice(1);\r\n\r\n return str.replace(/([^_])(?:_+([^_]))/g, function ($0, $1, $2) {\r\n return $1 + $2.toUpperCase();\r\n });\r\n}","import { gettype } from \"../gettype/gettype\";\r\n\r\n/**\r\n * 物件深度合併\r\n * @param target\r\n * @param sources\r\n * @returns\r\n */\r\nexport function deepAssign(...param: ({ [_: string]: any } | undefined)[]) {\r\n let temp: any[] = param.filter(v => gettype(v) === \"object\")\r\n if (temp.length < 1) return {};\r\n \r\n let result = Object.assign({}, ...temp);\r\n\r\n for (let item of temp) {\r\n for (const [idx, val] of Object.entries<any>(item)) {\r\n if (gettype(val) === \"object\") {\r\n result[idx] = deepAssign(result[idx], val);\r\n }\r\n }\r\n }\r\n return result;\r\n}\r\n","/**\r\n * 多欄位排序\r\n * @param sort \r\n * @returns \r\n */\r\nexport function fieldSorter(sort: {\r\n isDesc?: boolean,\r\n fields: {\r\n key: string,\r\n isNumber?: boolean,\r\n isDesc?: boolean\r\n }[]\r\n}) {\r\n return (a: { [_: string]: any }, b: { [_: string]: any }) => {\r\n const data = sort.fields\r\n .map(filed => {\r\n let dir = 1;\r\n if (filed.isDesc) {\r\n dir = -1;\r\n }\r\n\r\n let valueA = a[filed.key];\r\n let valueB = b[filed.key];\r\n\r\n if (!valueA || !valueB)\r\n return 0;\r\n\r\n if (filed.isNumber) {\r\n valueA = Number(valueA);\r\n valueB = Number(valueB);\r\n\r\n if (Number.isNaN(valueA) || Number.isNaN(valueB))\r\n return 0\r\n }\r\n\r\n return valueA > valueB ? dir : valueA < valueB ? -(dir) : 0;\r\n }).reduce((p, n) => p ? p : n, 0);\r\n\r\n if (sort.isDesc)\r\n data * -1;\r\n\r\n return data;\r\n };\r\n};","/**\r\n * 取得區間的數值\r\n * @param start 開始時間\r\n * @param stop 結束時間\r\n * @param step 間隔\r\n * @returns \r\n */\r\nexport function range(start: number, stop: number, step: number) {\r\n const range = { length: (stop - start) / step + 1 };\r\n\r\n return Array.from(range, (_, i) => start + (i * step));\r\n};"],"mappings":"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","names":["range"]}
@@ -2,8 +2,7 @@
2
2
  function data_set(data, key, value) {
3
3
  const keys = key.split(".");
4
4
  const firstKey = keys.shift();
5
- if (!firstKey)
6
- return data;
5
+ if (!firstKey) return data;
7
6
  if (keys.length < 1) {
8
7
  data[firstKey] = value;
9
8
  return data;
@@ -17,16 +16,11 @@ function data_get(data, key, defaultValue = null) {
17
16
  switch (gettype(data)) {
18
17
  case "object":
19
18
  const coypData = deepCloneWithJson(data);
20
- const keys = key.split(".");
21
- let firstKey = keys.shift();
22
- if (!firstKey)
23
- return defaultValue;
24
- if (!(firstKey in coypData))
25
- return defaultValue;
26
- let rep = coypData[firstKey];
27
- if (keys.length > 0)
28
- rep = data_get(rep, keys.join("."), defaultValue);
29
- return rep != null ? rep : defaultValue;
19
+ const findKey = Object.keys(coypData).find((k) => key.startsWith(k));
20
+ if (!findKey) return defaultValue;
21
+ key = findKey === key ? "" : key.replace(findKey + ".", "");
22
+ if (key === "") return coypData[findKey];
23
+ return data_get(coypData[findKey], key, defaultValue);
30
24
  case "undefined":
31
25
  case "null":
32
26
  return defaultValue;
@@ -97,8 +91,7 @@ function parameterMerge(value1, value2) {
97
91
 
98
92
  // src/help/head/head.ts
99
93
  function head(arr) {
100
- if (gettype(arr) !== "array")
101
- return null;
94
+ if (gettype(arr) !== "array") return null;
102
95
  return arr.length > 0 ? arr[0] : null;
103
96
  }
104
97
 
@@ -109,11 +102,9 @@ function deepCloneWithJson(obj) {
109
102
 
110
103
  // src/help/remove/remove.ts
111
104
  function remove(arr, item) {
112
- if (arr.length === 0)
113
- return [];
105
+ if (arr.length === 0) return [];
114
106
  const index = arr.indexOf(item);
115
- if (index === -1)
116
- return arr;
107
+ if (index === -1) return arr;
117
108
  return [...arr.slice(0, index), ...arr.slice(index + 1)];
118
109
  }
119
110
 
@@ -129,8 +120,7 @@ function strToConvert(str, convert = "_") {
129
120
 
130
121
  // src/help/strToHump/strToHump.ts
131
122
  function strToHump(str) {
132
- if (str.startsWith("_"))
133
- str = str.slice(1);
123
+ if (str.startsWith("_")) str = str.slice(1);
134
124
  return str.replace(/([^_])(?:_+([^_]))/g, function($0, $1, $2) {
135
125
  return $1 + $2.toUpperCase();
136
126
  });
@@ -139,8 +129,7 @@ function strToHump(str) {
139
129
  // src/help/deepAssign/deepAssign.ts
140
130
  function deepAssign(...param) {
141
131
  let temp = param.filter((v) => gettype(v) === "object");
142
- if (temp.length < 1)
143
- return {};
132
+ if (temp.length < 1) return {};
144
133
  let result = Object.assign({}, ...temp);
145
134
  for (let item of temp) {
146
135
  for (const [idx, val] of Object.entries(item)) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/help/data_set/data_set.ts","../../src/help/data_get/data_get.ts","../../src/help/recursiveDeepCopy/recursiveDeepCopy.ts","../../src/help/emptyData/emptyData.ts","../../src/help/gettype/gettype.ts","../../src/help/parameterMerge/parameterMerge.ts","../../src/help/head/head.ts","../../src/help/deepCloneWithJson/deepCloneWithJson.ts","../../src/help/remove/remove.ts","../../src/help/searchInStr/searchInStr.ts","../../src/help/strToConvert/strToConvert.ts","../../src/help/strToHump/strToHump.ts","../../src/help/deepAssign/deepAssign.ts","../../src/help/fieldSorter/fieldSorter.ts","../../src/help/range/range.ts"],"sourcesContent":["/**\r\n * 動態設定多層物件的參數\r\n * @param data 被設定的物件\r\n * @param key 位置\r\n * @param value 參數\r\n * @returns \r\n */\r\nexport function data_set(data: any, key: string, value: any) {\r\n const keys = key.split(\".\");\r\n const firstKey = keys.shift();\r\n if (!firstKey) return data;\r\n\r\n if (keys.length < 1) {\r\n data[firstKey] = value;\r\n return data;\r\n }\r\n\r\n data[firstKey] = data_set({}, keys.join(\".\"), value);\r\n return data;\r\n}","import { deepCloneWithJson, gettype } from \"..\";\r\n\r\n/**\r\n * 獲取資料\r\n * @param data 資料集{key:value}\r\n * @param key 資料對應的位置 app.column.name\r\n * @param defaultValue 如果取不到值要給予什麼參數,預設 null\r\n * @returns\r\n *\r\n * {a:[{b:a},{b:a}]}\r\n * a.b = [a,a]\r\n */\r\nexport function data_get(data: any, key: string, defaultValue: any = null,): any {\r\n switch (gettype(data)) {\r\n case \"object\":\r\n const coypData = deepCloneWithJson(data);\r\n const keys = key.split('.');\r\n let firstKey = keys.shift();\r\n if (!firstKey) return defaultValue;\r\n if (!(firstKey in coypData)) return defaultValue;\r\n\r\n let rep = coypData[firstKey];\r\n if (keys.length > 0)\r\n rep = data_get(rep, keys.join('.'), defaultValue);\r\n\r\n return rep ?? defaultValue;\r\n case 'undefined':\r\n case 'null':\r\n return defaultValue;\r\n case 'array':\r\n return (data as any[]).map((value: any) => data_get(value, key, defaultValue)) as any;\r\n default:\r\n return data;\r\n }\r\n}","/**\r\n* 透過遞迴複製物件\r\n* @param o \r\n* @returns \r\n*/\r\nexport function recursiveDeepCopy<T = any>(o: T): T {\r\n switch (Object.prototype.toString.apply(o)) {\r\n case \"[object Array]\":\r\n const tempArry: any = [];\r\n (o as Array<any>).forEach(value => {\r\n (tempArry as Array<any>).push(recursiveDeepCopy(value));\r\n })\r\n return tempArry;\r\n case \"[object Object]\":\r\n const tempO: any = {};\r\n Object.keys(o as Object).forEach(key => {\r\n if (Object.prototype.hasOwnProperty.call(o, key))\r\n tempO[key] = recursiveDeepCopy((o as { [_: string]: any })[key]);\r\n })\r\n return tempO;\r\n default:\r\n return o;\r\n }\r\n}","/**\r\n * 判斷資料是否為空值\r\n * @param data \r\n * @returns \r\n */\r\nexport function emptyData(data: any) {\r\n return typeof data === \"undefined\" || data === null\r\n}","/**\r\n * 回傳物體的型態\r\n * @param obj \r\n * @returns \r\n */\r\nexport function gettype<T = any>(obj: T) {\r\n switch (true) {\r\n case obj instanceof Array:\r\n return 'array';\r\n case obj instanceof Date:\r\n return 'date';\r\n case obj === null:\r\n return 'null';\r\n default:\r\n return typeof obj;\r\n }\r\n}","import { gettype, recursiveDeepCopy } from \"..\";\r\n\r\n/**\r\n * 兩個參數的合併(只能是物件或者陣列)\r\n * 如果是空值就回傳空物件\r\n * @param value1 \r\n * @param value2 \r\n * @returns \r\n */\r\nexport function parameterMerge(value1?: any, value2?: any) {\r\n const type1 = gettype(value1);\r\n const type2 = gettype(value2);\r\n\r\n switch (true) {\r\n case (type1 === \"undefined\" || type1 === \"null\") && !!value2:\r\n return value2;\r\n case (type2 === \"undefined\" || type2 === \"null\") && !!value1:\r\n return value1;\r\n case type1 === \"array\" && type1 === type2:\r\n return [...value1, ...value2];\r\n case type1 === \"object\" && type1 === type2:\r\n return Object.assign(recursiveDeepCopy(value1), value2);\r\n default:\r\n return {};\r\n }\r\n}","import { gettype } from \"..\";\r\n\r\n/**\r\n * 回傳物件的第一個值或者空值\r\n * @param arr\r\n * @returns\r\n */\r\nexport function head<T = any>(arr: Array<T>): T | null {\r\n if (gettype(arr) !== 'array') return null;\r\n return arr.length > 0 ? arr[0] : null;\r\n}\r\n\r\n\r\n","/**\r\n * 透過 JSON 複製物件\r\n * @param obj 要複製的物件\r\n * @returns\r\n */\r\nexport function deepCloneWithJson<T>(obj: T) {\r\n return JSON.parse(JSON.stringify(obj));\r\n }\r\n ","type TremoveValeu = string | number\r\n\r\n/**\r\n * 移除陣列某一個位置的值\r\n * @param arr 陣列\r\n * @param item 要移除的值\r\n * @returns\r\n */\r\nexport function remove(arr: TremoveValeu[], item: TremoveValeu) {\r\n if (arr.length === 0) return [];\r\n\r\n const index = arr.indexOf(item);\r\n if (index === -1) return arr;\r\n\r\n return [...arr.slice(0, index), ...arr.slice(index + 1)];\r\n}","/**\r\n * 尋找字串內是否有符合的值,並移除後回傳結果\r\n * @param str 字串\r\n * @param key 要搜尋的文字\r\n * @returns [boolean,string]\r\n */\r\nexport function searchInStr(str: string, key: string): [boolean, string] {\r\n return str.indexOf(key) === -1 ? [false, str] : [true, str.replace(key, '')];\r\n}","/**\r\n * 駝峰轉小寫+convert(default:底線)\r\n * @param str\r\n * @returns\r\n */\r\nexport function strToConvert(str: string, convert: string = \"_\") {\r\n return str.replace(/\\B([A-Z])/g, `${convert}$1`).toLowerCase();\r\n}","/**\r\n * 底線轉駝峰\r\n * @param str\r\n * @returns\r\n */\r\nexport function strToHump(str: string) {\r\n if (str.startsWith('_')) str = str.slice(1);\r\n\r\n return str.replace(/([^_])(?:_+([^_]))/g, function ($0, $1, $2) {\r\n return $1 + $2.toUpperCase();\r\n });\r\n}","import { gettype } from \"../gettype/gettype\";\r\n\r\n/**\r\n * 物件深度合併\r\n * @param target\r\n * @param sources\r\n * @returns\r\n */\r\nexport function deepAssign(...param: ({ [_: string]: any } | undefined)[]) {\r\n let temp: any[] = param.filter(v => gettype(v) === \"object\")\r\n if (temp.length < 1) return {};\r\n \r\n let result = Object.assign({}, ...temp);\r\n\r\n for (let item of temp) {\r\n for (const [idx, val] of Object.entries<any>(item)) {\r\n if (gettype(val) === \"object\") {\r\n result[idx] = deepAssign(result[idx], val);\r\n }\r\n }\r\n }\r\n return result;\r\n}\r\n","/**\r\n * 多欄位排序\r\n * @param sort \r\n * @returns \r\n */\r\nexport function fieldSorter(sort: {\r\n isDesc?: boolean,\r\n fields: {\r\n key: string,\r\n isNumber?: boolean,\r\n isDesc?: boolean\r\n }[]\r\n}) {\r\n return (a: { [_: string]: any }, b: { [_: string]: any }) => {\r\n const data = sort.fields\r\n .map(filed => {\r\n let dir = 1;\r\n if (filed.isDesc) {\r\n dir = -1;\r\n }\r\n\r\n let valueA = a[filed.key];\r\n let valueB = b[filed.key];\r\n\r\n if (!valueA || !valueB)\r\n return 0;\r\n\r\n if (filed.isNumber) {\r\n valueA = Number(valueA);\r\n valueB = Number(valueB);\r\n\r\n if (Number.isNaN(valueA) || Number.isNaN(valueB))\r\n return 0\r\n }\r\n\r\n return valueA > valueB ? dir : valueA < valueB ? -(dir) : 0;\r\n }).reduce((p, n) => p ? p : n, 0);\r\n\r\n if (sort.isDesc)\r\n data * -1;\r\n\r\n return data;\r\n };\r\n};","/**\r\n * 取得區間的數值\r\n * @param start 開始時間\r\n * @param stop 結束時間\r\n * @param step 間隔\r\n * @returns \r\n */\r\nexport function range(start: number, stop: number, step: number) {\r\n const range = { length: (stop - start) / step + 1 };\r\n\r\n return Array.from(range, (_, i) => start + (i * step));\r\n};"],"mappings":"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","names":["range"]}
1
+ {"version":3,"sources":["../../src/help/data_set/data_set.ts","../../src/help/data_get/data_get.ts","../../src/help/recursiveDeepCopy/recursiveDeepCopy.ts","../../src/help/emptyData/emptyData.ts","../../src/help/gettype/gettype.ts","../../src/help/parameterMerge/parameterMerge.ts","../../src/help/head/head.ts","../../src/help/deepCloneWithJson/deepCloneWithJson.ts","../../src/help/remove/remove.ts","../../src/help/searchInStr/searchInStr.ts","../../src/help/strToConvert/strToConvert.ts","../../src/help/strToHump/strToHump.ts","../../src/help/deepAssign/deepAssign.ts","../../src/help/fieldSorter/fieldSorter.ts","../../src/help/range/range.ts"],"sourcesContent":["/**\r\n * 動態設定多層物件的參數\r\n * @param data 被設定的物件\r\n * @param key 位置\r\n * @param value 參數\r\n * @returns \r\n */\r\nexport function data_set(data: any, key: string, value: any) {\r\n const keys = key.split(\".\");\r\n const firstKey = keys.shift();\r\n if (!firstKey) return data;\r\n\r\n if (keys.length < 1) {\r\n data[firstKey] = value;\r\n return data;\r\n }\r\n\r\n data[firstKey] = data_set({}, keys.join(\".\"), value);\r\n return data;\r\n}","import { deepCloneWithJson, gettype } from \"..\";\r\n\r\n/**\r\n * 獲取資料\r\n * @param data 資料集 {key:value} \r\n * @param key 資料對應的位置 app.column.name\r\n * @param defaultValue 如果取不到值要給予什麼參數,預設 null\r\n * @returns\r\n *\r\n * {a:[{b:a},{b:a}]}\r\n * a.b = [a,a]\r\n */\r\nexport function data_get<T = any>(data: { [key: string]: any } | any[] | null | undefined, key: string, defaultValue: any = null,): T {\r\n switch (gettype(data)) {\r\n case \"object\":\r\n const coypData = deepCloneWithJson(data);\r\n const findKey = Object.keys(coypData).find((k) => key.startsWith(k));\r\n if (!findKey) return defaultValue;\r\n\r\n key = findKey === key ? '' : key.replace(findKey + '.', '');\r\n if (key === '') return coypData[findKey];\r\n\r\n return data_get(coypData[findKey], key, defaultValue);\r\n\r\n case 'undefined':\r\n case 'null':\r\n return defaultValue;\r\n case 'array':\r\n return (data as any[]).map((value: any) => data_get(value, key, defaultValue)) as any;\r\n default:\r\n return data as any;\r\n }\r\n}","/**\r\n* 透過遞迴複製物件\r\n* @param o \r\n* @returns \r\n*/\r\nexport function recursiveDeepCopy<T = any>(o: T): T {\r\n switch (Object.prototype.toString.apply(o)) {\r\n case \"[object Array]\":\r\n const tempArry: any = [];\r\n (o as Array<any>).forEach(value => {\r\n (tempArry as Array<any>).push(recursiveDeepCopy(value));\r\n })\r\n return tempArry;\r\n case \"[object Object]\":\r\n const tempO: any = {};\r\n Object.keys(o as Object).forEach(key => {\r\n if (Object.prototype.hasOwnProperty.call(o, key))\r\n tempO[key] = recursiveDeepCopy((o as { [_: string]: any })[key]);\r\n })\r\n return tempO;\r\n default:\r\n return o;\r\n }\r\n}","/**\r\n * 判斷資料是否為空值\r\n * @param data \r\n * @returns \r\n */\r\nexport function emptyData(data: any) {\r\n return typeof data === \"undefined\" || data === null\r\n}","/**\r\n * 回傳物體的型態\r\n * @param obj \r\n * @returns \r\n */\r\nexport function gettype<T = any>(obj: T) {\r\n switch (true) {\r\n case obj instanceof Array:\r\n return 'array';\r\n case obj instanceof Date:\r\n return 'date';\r\n case obj === null:\r\n return 'null';\r\n default:\r\n return typeof obj;\r\n }\r\n}","import { gettype, recursiveDeepCopy } from \"..\";\r\n\r\n/**\r\n * 兩個參數的合併(只能是物件或者陣列)\r\n * 如果是空值就回傳空物件\r\n * @param value1 \r\n * @param value2 \r\n * @returns \r\n */\r\nexport function parameterMerge(value1?: any, value2?: any) {\r\n const type1 = gettype(value1);\r\n const type2 = gettype(value2);\r\n\r\n switch (true) {\r\n case (type1 === \"undefined\" || type1 === \"null\") && !!value2:\r\n return value2;\r\n case (type2 === \"undefined\" || type2 === \"null\") && !!value1:\r\n return value1;\r\n case type1 === \"array\" && type1 === type2:\r\n return [...value1, ...value2];\r\n case type1 === \"object\" && type1 === type2:\r\n return Object.assign(recursiveDeepCopy(value1), value2);\r\n default:\r\n return {};\r\n }\r\n}","import { gettype } from \"..\";\r\n\r\n/**\r\n * 回傳物件的第一個值或者空值\r\n * @param arr\r\n * @returns\r\n */\r\nexport function head<T = any>(arr: Array<T>): T | null {\r\n if (gettype(arr) !== 'array') return null;\r\n return arr.length > 0 ? arr[0] : null;\r\n}\r\n\r\n\r\n","/**\r\n * 透過 JSON 複製物件\r\n * @param obj 要複製的物件\r\n * @returns\r\n */\r\nexport function deepCloneWithJson<T>(obj: T) {\r\n return JSON.parse(JSON.stringify(obj));\r\n }\r\n ","type TremoveValeu = string | number\r\n\r\n/**\r\n * 移除陣列某一個位置的值\r\n * @param arr 陣列\r\n * @param item 要移除的值\r\n * @returns\r\n */\r\nexport function remove(arr: TremoveValeu[], item: TremoveValeu) {\r\n if (arr.length === 0) return [];\r\n\r\n const index = arr.indexOf(item);\r\n if (index === -1) return arr;\r\n\r\n return [...arr.slice(0, index), ...arr.slice(index + 1)];\r\n}","/**\r\n * 尋找字串內是否有符合的值,並移除後回傳結果\r\n * @param str 字串\r\n * @param key 要搜尋的文字\r\n * @returns [boolean,string]\r\n */\r\nexport function searchInStr(str: string, key: string): [boolean, string] {\r\n return str.indexOf(key) === -1 ? [false, str] : [true, str.replace(key, '')];\r\n}","/**\r\n * 駝峰轉小寫+convert(default:底線)\r\n * @param str\r\n * @returns\r\n */\r\nexport function strToConvert(str: string, convert: string = \"_\") {\r\n return str.replace(/\\B([A-Z])/g, `${convert}$1`).toLowerCase();\r\n}","/**\r\n * 底線轉駝峰\r\n * @param str\r\n * @returns\r\n */\r\nexport function strToHump(str: string) {\r\n if (str.startsWith('_')) str = str.slice(1);\r\n\r\n return str.replace(/([^_])(?:_+([^_]))/g, function ($0, $1, $2) {\r\n return $1 + $2.toUpperCase();\r\n });\r\n}","import { gettype } from \"../gettype/gettype\";\r\n\r\n/**\r\n * 物件深度合併\r\n * @param target\r\n * @param sources\r\n * @returns\r\n */\r\nexport function deepAssign(...param: ({ [_: string]: any } | undefined)[]) {\r\n let temp: any[] = param.filter(v => gettype(v) === \"object\")\r\n if (temp.length < 1) return {};\r\n \r\n let result = Object.assign({}, ...temp);\r\n\r\n for (let item of temp) {\r\n for (const [idx, val] of Object.entries<any>(item)) {\r\n if (gettype(val) === \"object\") {\r\n result[idx] = deepAssign(result[idx], val);\r\n }\r\n }\r\n }\r\n return result;\r\n}\r\n","/**\r\n * 多欄位排序\r\n * @param sort \r\n * @returns \r\n */\r\nexport function fieldSorter(sort: {\r\n isDesc?: boolean,\r\n fields: {\r\n key: string,\r\n isNumber?: boolean,\r\n isDesc?: boolean\r\n }[]\r\n}) {\r\n return (a: { [_: string]: any }, b: { [_: string]: any }) => {\r\n const data = sort.fields\r\n .map(filed => {\r\n let dir = 1;\r\n if (filed.isDesc) {\r\n dir = -1;\r\n }\r\n\r\n let valueA = a[filed.key];\r\n let valueB = b[filed.key];\r\n\r\n if (!valueA || !valueB)\r\n return 0;\r\n\r\n if (filed.isNumber) {\r\n valueA = Number(valueA);\r\n valueB = Number(valueB);\r\n\r\n if (Number.isNaN(valueA) || Number.isNaN(valueB))\r\n return 0\r\n }\r\n\r\n return valueA > valueB ? dir : valueA < valueB ? -(dir) : 0;\r\n }).reduce((p, n) => p ? p : n, 0);\r\n\r\n if (sort.isDesc)\r\n data * -1;\r\n\r\n return data;\r\n };\r\n};","/**\r\n * 取得區間的數值\r\n * @param start 開始時間\r\n * @param stop 結束時間\r\n * @param step 間隔\r\n * @returns \r\n */\r\nexport function range(start: number, stop: number, step: number) {\r\n const range = { length: (stop - start) / step + 1 };\r\n\r\n return Array.from(range, (_, i) => start + (i * step));\r\n};"],"mappings":"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","names":["range"]}
package/dist/index.js CHANGED
@@ -18,11 +18,11 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
 
20
20
  // src/index.ts
21
- var src_exports = {};
22
- __export(src_exports, {
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
23
  help: () => help_exports
24
24
  });
25
- module.exports = __toCommonJS(src_exports);
25
+ module.exports = __toCommonJS(index_exports);
26
26
 
27
27
  // src/help/index.ts
28
28
  var help_exports = {};
@@ -48,8 +48,7 @@ __export(help_exports, {
48
48
  function data_set(data, key, value) {
49
49
  const keys = key.split(".");
50
50
  const firstKey = keys.shift();
51
- if (!firstKey)
52
- return data;
51
+ if (!firstKey) return data;
53
52
  if (keys.length < 1) {
54
53
  data[firstKey] = value;
55
54
  return data;
@@ -63,16 +62,11 @@ function data_get(data, key, defaultValue = null) {
63
62
  switch (gettype(data)) {
64
63
  case "object":
65
64
  const coypData = deepCloneWithJson(data);
66
- const keys = key.split(".");
67
- let firstKey = keys.shift();
68
- if (!firstKey)
69
- return defaultValue;
70
- if (!(firstKey in coypData))
71
- return defaultValue;
72
- let rep = coypData[firstKey];
73
- if (keys.length > 0)
74
- rep = data_get(rep, keys.join("."), defaultValue);
75
- return rep != null ? rep : defaultValue;
65
+ const findKey = Object.keys(coypData).find((k) => key.startsWith(k));
66
+ if (!findKey) return defaultValue;
67
+ key = findKey === key ? "" : key.replace(findKey + ".", "");
68
+ if (key === "") return coypData[findKey];
69
+ return data_get(coypData[findKey], key, defaultValue);
76
70
  case "undefined":
77
71
  case "null":
78
72
  return defaultValue;
@@ -143,8 +137,7 @@ function parameterMerge(value1, value2) {
143
137
 
144
138
  // src/help/head/head.ts
145
139
  function head(arr) {
146
- if (gettype(arr) !== "array")
147
- return null;
140
+ if (gettype(arr) !== "array") return null;
148
141
  return arr.length > 0 ? arr[0] : null;
149
142
  }
150
143
 
@@ -155,11 +148,9 @@ function deepCloneWithJson(obj) {
155
148
 
156
149
  // src/help/remove/remove.ts
157
150
  function remove(arr, item) {
158
- if (arr.length === 0)
159
- return [];
151
+ if (arr.length === 0) return [];
160
152
  const index = arr.indexOf(item);
161
- if (index === -1)
162
- return arr;
153
+ if (index === -1) return arr;
163
154
  return [...arr.slice(0, index), ...arr.slice(index + 1)];
164
155
  }
165
156
 
@@ -175,8 +166,7 @@ function strToConvert(str, convert = "_") {
175
166
 
176
167
  // src/help/strToHump/strToHump.ts
177
168
  function strToHump(str) {
178
- if (str.startsWith("_"))
179
- str = str.slice(1);
169
+ if (str.startsWith("_")) str = str.slice(1);
180
170
  return str.replace(/([^_])(?:_+([^_]))/g, function($0, $1, $2) {
181
171
  return $1 + $2.toUpperCase();
182
172
  });
@@ -185,8 +175,7 @@ function strToHump(str) {
185
175
  // src/help/deepAssign/deepAssign.ts
186
176
  function deepAssign(...param) {
187
177
  let temp = param.filter((v) => gettype(v) === "object");
188
- if (temp.length < 1)
189
- return {};
178
+ if (temp.length < 1) return {};
190
179
  let result = Object.assign({}, ...temp);
191
180
  for (let item of temp) {
192
181
  for (const [idx, val] of Object.entries(item)) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/help/index.ts","../src/help/data_set/data_set.ts","../src/help/data_get/data_get.ts","../src/help/recursiveDeepCopy/recursiveDeepCopy.ts","../src/help/emptyData/emptyData.ts","../src/help/gettype/gettype.ts","../src/help/parameterMerge/parameterMerge.ts","../src/help/head/head.ts","../src/help/deepCloneWithJson/deepCloneWithJson.ts","../src/help/remove/remove.ts","../src/help/searchInStr/searchInStr.ts","../src/help/strToConvert/strToConvert.ts","../src/help/strToHump/strToHump.ts","../src/help/deepAssign/deepAssign.ts","../src/help/fieldSorter/fieldSorter.ts","../src/help/range/range.ts"],"sourcesContent":["import * as help from './help';\r\n\r\nexport { help }","export * from './data_set/data_set';\r\nexport * from './data_get/data_get';\r\nexport * from './recursiveDeepCopy/recursiveDeepCopy';\r\nexport * from './emptyData/emptyData';\r\nexport * from './gettype/gettype';\r\nexport * from './parameterMerge/parameterMerge';\r\nexport * from './head/head';\r\nexport * from './deepCloneWithJson/deepCloneWithJson';\r\nexport * from './remove/remove';\r\nexport * from './searchInStr/searchInStr';\r\nexport * from './strToConvert/strToConvert';\r\nexport * from './strToHump/strToHump';\r\nexport * from './deepAssign/deepAssign';\r\nexport * from './fieldSorter/fieldSorter';\r\nexport * from \"./range/range\";","/**\r\n * 動態設定多層物件的參數\r\n * @param data 被設定的物件\r\n * @param key 位置\r\n * @param value 參數\r\n * @returns \r\n */\r\nexport function data_set(data: any, key: string, value: any) {\r\n const keys = key.split(\".\");\r\n const firstKey = keys.shift();\r\n if (!firstKey) return data;\r\n\r\n if (keys.length < 1) {\r\n data[firstKey] = value;\r\n return data;\r\n }\r\n\r\n data[firstKey] = data_set({}, keys.join(\".\"), value);\r\n return data;\r\n}","import { deepCloneWithJson, gettype } from \"..\";\r\n\r\n/**\r\n * 獲取資料\r\n * @param data 資料集{key:value}\r\n * @param key 資料對應的位置 app.column.name\r\n * @param defaultValue 如果取不到值要給予什麼參數,預設 null\r\n * @returns\r\n *\r\n * {a:[{b:a},{b:a}]}\r\n * a.b = [a,a]\r\n */\r\nexport function data_get(data: any, key: string, defaultValue: any = null,): any {\r\n switch (gettype(data)) {\r\n case \"object\":\r\n const coypData = deepCloneWithJson(data);\r\n const keys = key.split('.');\r\n let firstKey = keys.shift();\r\n if (!firstKey) return defaultValue;\r\n if (!(firstKey in coypData)) return defaultValue;\r\n\r\n let rep = coypData[firstKey];\r\n if (keys.length > 0)\r\n rep = data_get(rep, keys.join('.'), defaultValue);\r\n\r\n return rep ?? defaultValue;\r\n case 'undefined':\r\n case 'null':\r\n return defaultValue;\r\n case 'array':\r\n return (data as any[]).map((value: any) => data_get(value, key, defaultValue)) as any;\r\n default:\r\n return data;\r\n }\r\n}","/**\r\n* 透過遞迴複製物件\r\n* @param o \r\n* @returns \r\n*/\r\nexport function recursiveDeepCopy<T = any>(o: T): T {\r\n switch (Object.prototype.toString.apply(o)) {\r\n case \"[object Array]\":\r\n const tempArry: any = [];\r\n (o as Array<any>).forEach(value => {\r\n (tempArry as Array<any>).push(recursiveDeepCopy(value));\r\n })\r\n return tempArry;\r\n case \"[object Object]\":\r\n const tempO: any = {};\r\n Object.keys(o as Object).forEach(key => {\r\n if (Object.prototype.hasOwnProperty.call(o, key))\r\n tempO[key] = recursiveDeepCopy((o as { [_: string]: any })[key]);\r\n })\r\n return tempO;\r\n default:\r\n return o;\r\n }\r\n}","/**\r\n * 判斷資料是否為空值\r\n * @param data \r\n * @returns \r\n */\r\nexport function emptyData(data: any) {\r\n return typeof data === \"undefined\" || data === null\r\n}","/**\r\n * 回傳物體的型態\r\n * @param obj \r\n * @returns \r\n */\r\nexport function gettype<T = any>(obj: T) {\r\n switch (true) {\r\n case obj instanceof Array:\r\n return 'array';\r\n case obj instanceof Date:\r\n return 'date';\r\n case obj === null:\r\n return 'null';\r\n default:\r\n return typeof obj;\r\n }\r\n}","import { gettype, recursiveDeepCopy } from \"..\";\r\n\r\n/**\r\n * 兩個參數的合併(只能是物件或者陣列)\r\n * 如果是空值就回傳空物件\r\n * @param value1 \r\n * @param value2 \r\n * @returns \r\n */\r\nexport function parameterMerge(value1?: any, value2?: any) {\r\n const type1 = gettype(value1);\r\n const type2 = gettype(value2);\r\n\r\n switch (true) {\r\n case (type1 === \"undefined\" || type1 === \"null\") && !!value2:\r\n return value2;\r\n case (type2 === \"undefined\" || type2 === \"null\") && !!value1:\r\n return value1;\r\n case type1 === \"array\" && type1 === type2:\r\n return [...value1, ...value2];\r\n case type1 === \"object\" && type1 === type2:\r\n return Object.assign(recursiveDeepCopy(value1), value2);\r\n default:\r\n return {};\r\n }\r\n}","import { gettype } from \"..\";\r\n\r\n/**\r\n * 回傳物件的第一個值或者空值\r\n * @param arr\r\n * @returns\r\n */\r\nexport function head<T = any>(arr: Array<T>): T | null {\r\n if (gettype(arr) !== 'array') return null;\r\n return arr.length > 0 ? arr[0] : null;\r\n}\r\n\r\n\r\n","/**\r\n * 透過 JSON 複製物件\r\n * @param obj 要複製的物件\r\n * @returns\r\n */\r\nexport function deepCloneWithJson<T>(obj: T) {\r\n return JSON.parse(JSON.stringify(obj));\r\n }\r\n ","type TremoveValeu = string | number\r\n\r\n/**\r\n * 移除陣列某一個位置的值\r\n * @param arr 陣列\r\n * @param item 要移除的值\r\n * @returns\r\n */\r\nexport function remove(arr: TremoveValeu[], item: TremoveValeu) {\r\n if (arr.length === 0) return [];\r\n\r\n const index = arr.indexOf(item);\r\n if (index === -1) return arr;\r\n\r\n return [...arr.slice(0, index), ...arr.slice(index + 1)];\r\n}","/**\r\n * 尋找字串內是否有符合的值,並移除後回傳結果\r\n * @param str 字串\r\n * @param key 要搜尋的文字\r\n * @returns [boolean,string]\r\n */\r\nexport function searchInStr(str: string, key: string): [boolean, string] {\r\n return str.indexOf(key) === -1 ? [false, str] : [true, str.replace(key, '')];\r\n}","/**\r\n * 駝峰轉小寫+convert(default:底線)\r\n * @param str\r\n * @returns\r\n */\r\nexport function strToConvert(str: string, convert: string = \"_\") {\r\n return str.replace(/\\B([A-Z])/g, `${convert}$1`).toLowerCase();\r\n}","/**\r\n * 底線轉駝峰\r\n * @param str\r\n * @returns\r\n */\r\nexport function strToHump(str: string) {\r\n if (str.startsWith('_')) str = str.slice(1);\r\n\r\n return str.replace(/([^_])(?:_+([^_]))/g, function ($0, $1, $2) {\r\n return $1 + $2.toUpperCase();\r\n });\r\n}","import { gettype } from \"../gettype/gettype\";\r\n\r\n/**\r\n * 物件深度合併\r\n * @param target\r\n * @param sources\r\n * @returns\r\n */\r\nexport function deepAssign(...param: ({ [_: string]: any } | undefined)[]) {\r\n let temp: any[] = param.filter(v => gettype(v) === \"object\")\r\n if (temp.length < 1) return {};\r\n \r\n let result = Object.assign({}, ...temp);\r\n\r\n for (let item of temp) {\r\n for (const [idx, val] of Object.entries<any>(item)) {\r\n if (gettype(val) === \"object\") {\r\n result[idx] = deepAssign(result[idx], val);\r\n }\r\n }\r\n }\r\n return result;\r\n}\r\n","/**\r\n * 多欄位排序\r\n * @param sort \r\n * @returns \r\n */\r\nexport function fieldSorter(sort: {\r\n isDesc?: boolean,\r\n fields: {\r\n key: string,\r\n isNumber?: boolean,\r\n isDesc?: boolean\r\n }[]\r\n}) {\r\n return (a: { [_: string]: any }, b: { [_: string]: any }) => {\r\n const data = sort.fields\r\n .map(filed => {\r\n let dir = 1;\r\n if (filed.isDesc) {\r\n dir = -1;\r\n }\r\n\r\n let valueA = a[filed.key];\r\n let valueB = b[filed.key];\r\n\r\n if (!valueA || !valueB)\r\n return 0;\r\n\r\n if (filed.isNumber) {\r\n valueA = Number(valueA);\r\n valueB = Number(valueB);\r\n\r\n if (Number.isNaN(valueA) || Number.isNaN(valueB))\r\n return 0\r\n }\r\n\r\n return valueA > valueB ? dir : valueA < valueB ? -(dir) : 0;\r\n }).reduce((p, n) => p ? p : n, 0);\r\n\r\n if (sort.isDesc)\r\n data * -1;\r\n\r\n return data;\r\n };\r\n};","/**\r\n * 取得區間的數值\r\n * @param start 開始時間\r\n * @param stop 結束時間\r\n * @param step 間隔\r\n * @returns \r\n */\r\nexport function range(start: number, stop: number, step: number) {\r\n const range = { length: (stop - start) / step + 1 };\r\n\r\n return Array.from(range, (_, i) => start + (i * step));\r\n};"],"mappings":"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","names":["range"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/help/index.ts","../src/help/data_set/data_set.ts","../src/help/data_get/data_get.ts","../src/help/recursiveDeepCopy/recursiveDeepCopy.ts","../src/help/emptyData/emptyData.ts","../src/help/gettype/gettype.ts","../src/help/parameterMerge/parameterMerge.ts","../src/help/head/head.ts","../src/help/deepCloneWithJson/deepCloneWithJson.ts","../src/help/remove/remove.ts","../src/help/searchInStr/searchInStr.ts","../src/help/strToConvert/strToConvert.ts","../src/help/strToHump/strToHump.ts","../src/help/deepAssign/deepAssign.ts","../src/help/fieldSorter/fieldSorter.ts","../src/help/range/range.ts"],"sourcesContent":["import * as help from './help';\r\n\r\nexport { help }","export * from './data_set/data_set';\r\nexport * from './data_get/data_get';\r\nexport * from './recursiveDeepCopy/recursiveDeepCopy';\r\nexport * from './emptyData/emptyData';\r\nexport * from './gettype/gettype';\r\nexport * from './parameterMerge/parameterMerge';\r\nexport * from './head/head';\r\nexport * from './deepCloneWithJson/deepCloneWithJson';\r\nexport * from './remove/remove';\r\nexport * from './searchInStr/searchInStr';\r\nexport * from './strToConvert/strToConvert';\r\nexport * from './strToHump/strToHump';\r\nexport * from './deepAssign/deepAssign';\r\nexport * from './fieldSorter/fieldSorter';\r\nexport * from \"./range/range\";","/**\r\n * 動態設定多層物件的參數\r\n * @param data 被設定的物件\r\n * @param key 位置\r\n * @param value 參數\r\n * @returns \r\n */\r\nexport function data_set(data: any, key: string, value: any) {\r\n const keys = key.split(\".\");\r\n const firstKey = keys.shift();\r\n if (!firstKey) return data;\r\n\r\n if (keys.length < 1) {\r\n data[firstKey] = value;\r\n return data;\r\n }\r\n\r\n data[firstKey] = data_set({}, keys.join(\".\"), value);\r\n return data;\r\n}","import { deepCloneWithJson, gettype } from \"..\";\r\n\r\n/**\r\n * 獲取資料\r\n * @param data 資料集 {key:value} \r\n * @param key 資料對應的位置 app.column.name\r\n * @param defaultValue 如果取不到值要給予什麼參數,預設 null\r\n * @returns\r\n *\r\n * {a:[{b:a},{b:a}]}\r\n * a.b = [a,a]\r\n */\r\nexport function data_get<T = any>(data: { [key: string]: any } | any[] | null | undefined, key: string, defaultValue: any = null,): T {\r\n switch (gettype(data)) {\r\n case \"object\":\r\n const coypData = deepCloneWithJson(data);\r\n const findKey = Object.keys(coypData).find((k) => key.startsWith(k));\r\n if (!findKey) return defaultValue;\r\n\r\n key = findKey === key ? '' : key.replace(findKey + '.', '');\r\n if (key === '') return coypData[findKey];\r\n\r\n return data_get(coypData[findKey], key, defaultValue);\r\n\r\n case 'undefined':\r\n case 'null':\r\n return defaultValue;\r\n case 'array':\r\n return (data as any[]).map((value: any) => data_get(value, key, defaultValue)) as any;\r\n default:\r\n return data as any;\r\n }\r\n}","/**\r\n* 透過遞迴複製物件\r\n* @param o \r\n* @returns \r\n*/\r\nexport function recursiveDeepCopy<T = any>(o: T): T {\r\n switch (Object.prototype.toString.apply(o)) {\r\n case \"[object Array]\":\r\n const tempArry: any = [];\r\n (o as Array<any>).forEach(value => {\r\n (tempArry as Array<any>).push(recursiveDeepCopy(value));\r\n })\r\n return tempArry;\r\n case \"[object Object]\":\r\n const tempO: any = {};\r\n Object.keys(o as Object).forEach(key => {\r\n if (Object.prototype.hasOwnProperty.call(o, key))\r\n tempO[key] = recursiveDeepCopy((o as { [_: string]: any })[key]);\r\n })\r\n return tempO;\r\n default:\r\n return o;\r\n }\r\n}","/**\r\n * 判斷資料是否為空值\r\n * @param data \r\n * @returns \r\n */\r\nexport function emptyData(data: any) {\r\n return typeof data === \"undefined\" || data === null\r\n}","/**\r\n * 回傳物體的型態\r\n * @param obj \r\n * @returns \r\n */\r\nexport function gettype<T = any>(obj: T) {\r\n switch (true) {\r\n case obj instanceof Array:\r\n return 'array';\r\n case obj instanceof Date:\r\n return 'date';\r\n case obj === null:\r\n return 'null';\r\n default:\r\n return typeof obj;\r\n }\r\n}","import { gettype, recursiveDeepCopy } from \"..\";\r\n\r\n/**\r\n * 兩個參數的合併(只能是物件或者陣列)\r\n * 如果是空值就回傳空物件\r\n * @param value1 \r\n * @param value2 \r\n * @returns \r\n */\r\nexport function parameterMerge(value1?: any, value2?: any) {\r\n const type1 = gettype(value1);\r\n const type2 = gettype(value2);\r\n\r\n switch (true) {\r\n case (type1 === \"undefined\" || type1 === \"null\") && !!value2:\r\n return value2;\r\n case (type2 === \"undefined\" || type2 === \"null\") && !!value1:\r\n return value1;\r\n case type1 === \"array\" && type1 === type2:\r\n return [...value1, ...value2];\r\n case type1 === \"object\" && type1 === type2:\r\n return Object.assign(recursiveDeepCopy(value1), value2);\r\n default:\r\n return {};\r\n }\r\n}","import { gettype } from \"..\";\r\n\r\n/**\r\n * 回傳物件的第一個值或者空值\r\n * @param arr\r\n * @returns\r\n */\r\nexport function head<T = any>(arr: Array<T>): T | null {\r\n if (gettype(arr) !== 'array') return null;\r\n return arr.length > 0 ? arr[0] : null;\r\n}\r\n\r\n\r\n","/**\r\n * 透過 JSON 複製物件\r\n * @param obj 要複製的物件\r\n * @returns\r\n */\r\nexport function deepCloneWithJson<T>(obj: T) {\r\n return JSON.parse(JSON.stringify(obj));\r\n }\r\n ","type TremoveValeu = string | number\r\n\r\n/**\r\n * 移除陣列某一個位置的值\r\n * @param arr 陣列\r\n * @param item 要移除的值\r\n * @returns\r\n */\r\nexport function remove(arr: TremoveValeu[], item: TremoveValeu) {\r\n if (arr.length === 0) return [];\r\n\r\n const index = arr.indexOf(item);\r\n if (index === -1) return arr;\r\n\r\n return [...arr.slice(0, index), ...arr.slice(index + 1)];\r\n}","/**\r\n * 尋找字串內是否有符合的值,並移除後回傳結果\r\n * @param str 字串\r\n * @param key 要搜尋的文字\r\n * @returns [boolean,string]\r\n */\r\nexport function searchInStr(str: string, key: string): [boolean, string] {\r\n return str.indexOf(key) === -1 ? [false, str] : [true, str.replace(key, '')];\r\n}","/**\r\n * 駝峰轉小寫+convert(default:底線)\r\n * @param str\r\n * @returns\r\n */\r\nexport function strToConvert(str: string, convert: string = \"_\") {\r\n return str.replace(/\\B([A-Z])/g, `${convert}$1`).toLowerCase();\r\n}","/**\r\n * 底線轉駝峰\r\n * @param str\r\n * @returns\r\n */\r\nexport function strToHump(str: string) {\r\n if (str.startsWith('_')) str = str.slice(1);\r\n\r\n return str.replace(/([^_])(?:_+([^_]))/g, function ($0, $1, $2) {\r\n return $1 + $2.toUpperCase();\r\n });\r\n}","import { gettype } from \"../gettype/gettype\";\r\n\r\n/**\r\n * 物件深度合併\r\n * @param target\r\n * @param sources\r\n * @returns\r\n */\r\nexport function deepAssign(...param: ({ [_: string]: any } | undefined)[]) {\r\n let temp: any[] = param.filter(v => gettype(v) === \"object\")\r\n if (temp.length < 1) return {};\r\n \r\n let result = Object.assign({}, ...temp);\r\n\r\n for (let item of temp) {\r\n for (const [idx, val] of Object.entries<any>(item)) {\r\n if (gettype(val) === \"object\") {\r\n result[idx] = deepAssign(result[idx], val);\r\n }\r\n }\r\n }\r\n return result;\r\n}\r\n","/**\r\n * 多欄位排序\r\n * @param sort \r\n * @returns \r\n */\r\nexport function fieldSorter(sort: {\r\n isDesc?: boolean,\r\n fields: {\r\n key: string,\r\n isNumber?: boolean,\r\n isDesc?: boolean\r\n }[]\r\n}) {\r\n return (a: { [_: string]: any }, b: { [_: string]: any }) => {\r\n const data = sort.fields\r\n .map(filed => {\r\n let dir = 1;\r\n if (filed.isDesc) {\r\n dir = -1;\r\n }\r\n\r\n let valueA = a[filed.key];\r\n let valueB = b[filed.key];\r\n\r\n if (!valueA || !valueB)\r\n return 0;\r\n\r\n if (filed.isNumber) {\r\n valueA = Number(valueA);\r\n valueB = Number(valueB);\r\n\r\n if (Number.isNaN(valueA) || Number.isNaN(valueB))\r\n return 0\r\n }\r\n\r\n return valueA > valueB ? dir : valueA < valueB ? -(dir) : 0;\r\n }).reduce((p, n) => p ? p : n, 0);\r\n\r\n if (sort.isDesc)\r\n data * -1;\r\n\r\n return data;\r\n };\r\n};","/**\r\n * 取得區間的數值\r\n * @param start 開始時間\r\n * @param stop 結束時間\r\n * @param step 間隔\r\n * @returns \r\n */\r\nexport function range(start: number, stop: number, step: number) {\r\n const range = { length: (stop - start) / step + 1 };\r\n\r\n return Array.from(range, (_, i) => start + (i * step));\r\n};"],"mappings":"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","names":["range"]}
package/dist/index.mjs CHANGED
@@ -28,8 +28,7 @@ __export(help_exports, {
28
28
  function data_set(data, key, value) {
29
29
  const keys = key.split(".");
30
30
  const firstKey = keys.shift();
31
- if (!firstKey)
32
- return data;
31
+ if (!firstKey) return data;
33
32
  if (keys.length < 1) {
34
33
  data[firstKey] = value;
35
34
  return data;
@@ -43,16 +42,11 @@ function data_get(data, key, defaultValue = null) {
43
42
  switch (gettype(data)) {
44
43
  case "object":
45
44
  const coypData = deepCloneWithJson(data);
46
- const keys = key.split(".");
47
- let firstKey = keys.shift();
48
- if (!firstKey)
49
- return defaultValue;
50
- if (!(firstKey in coypData))
51
- return defaultValue;
52
- let rep = coypData[firstKey];
53
- if (keys.length > 0)
54
- rep = data_get(rep, keys.join("."), defaultValue);
55
- return rep != null ? rep : defaultValue;
45
+ const findKey = Object.keys(coypData).find((k) => key.startsWith(k));
46
+ if (!findKey) return defaultValue;
47
+ key = findKey === key ? "" : key.replace(findKey + ".", "");
48
+ if (key === "") return coypData[findKey];
49
+ return data_get(coypData[findKey], key, defaultValue);
56
50
  case "undefined":
57
51
  case "null":
58
52
  return defaultValue;
@@ -123,8 +117,7 @@ function parameterMerge(value1, value2) {
123
117
 
124
118
  // src/help/head/head.ts
125
119
  function head(arr) {
126
- if (gettype(arr) !== "array")
127
- return null;
120
+ if (gettype(arr) !== "array") return null;
128
121
  return arr.length > 0 ? arr[0] : null;
129
122
  }
130
123
 
@@ -135,11 +128,9 @@ function deepCloneWithJson(obj) {
135
128
 
136
129
  // src/help/remove/remove.ts
137
130
  function remove(arr, item) {
138
- if (arr.length === 0)
139
- return [];
131
+ if (arr.length === 0) return [];
140
132
  const index = arr.indexOf(item);
141
- if (index === -1)
142
- return arr;
133
+ if (index === -1) return arr;
143
134
  return [...arr.slice(0, index), ...arr.slice(index + 1)];
144
135
  }
145
136
 
@@ -155,8 +146,7 @@ function strToConvert(str, convert = "_") {
155
146
 
156
147
  // src/help/strToHump/strToHump.ts
157
148
  function strToHump(str) {
158
- if (str.startsWith("_"))
159
- str = str.slice(1);
149
+ if (str.startsWith("_")) str = str.slice(1);
160
150
  return str.replace(/([^_])(?:_+([^_]))/g, function($0, $1, $2) {
161
151
  return $1 + $2.toUpperCase();
162
152
  });
@@ -165,8 +155,7 @@ function strToHump(str) {
165
155
  // src/help/deepAssign/deepAssign.ts
166
156
  function deepAssign(...param) {
167
157
  let temp = param.filter((v) => gettype(v) === "object");
168
- if (temp.length < 1)
169
- return {};
158
+ if (temp.length < 1) return {};
170
159
  let result = Object.assign({}, ...temp);
171
160
  for (let item of temp) {
172
161
  for (const [idx, val] of Object.entries(item)) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/help/index.ts","../src/help/data_set/data_set.ts","../src/help/data_get/data_get.ts","../src/help/recursiveDeepCopy/recursiveDeepCopy.ts","../src/help/emptyData/emptyData.ts","../src/help/gettype/gettype.ts","../src/help/parameterMerge/parameterMerge.ts","../src/help/head/head.ts","../src/help/deepCloneWithJson/deepCloneWithJson.ts","../src/help/remove/remove.ts","../src/help/searchInStr/searchInStr.ts","../src/help/strToConvert/strToConvert.ts","../src/help/strToHump/strToHump.ts","../src/help/deepAssign/deepAssign.ts","../src/help/fieldSorter/fieldSorter.ts","../src/help/range/range.ts"],"sourcesContent":["export * from './data_set/data_set';\r\nexport * from './data_get/data_get';\r\nexport * from './recursiveDeepCopy/recursiveDeepCopy';\r\nexport * from './emptyData/emptyData';\r\nexport * from './gettype/gettype';\r\nexport * from './parameterMerge/parameterMerge';\r\nexport * from './head/head';\r\nexport * from './deepCloneWithJson/deepCloneWithJson';\r\nexport * from './remove/remove';\r\nexport * from './searchInStr/searchInStr';\r\nexport * from './strToConvert/strToConvert';\r\nexport * from './strToHump/strToHump';\r\nexport * from './deepAssign/deepAssign';\r\nexport * from './fieldSorter/fieldSorter';\r\nexport * from \"./range/range\";","/**\r\n * 動態設定多層物件的參數\r\n * @param data 被設定的物件\r\n * @param key 位置\r\n * @param value 參數\r\n * @returns \r\n */\r\nexport function data_set(data: any, key: string, value: any) {\r\n const keys = key.split(\".\");\r\n const firstKey = keys.shift();\r\n if (!firstKey) return data;\r\n\r\n if (keys.length < 1) {\r\n data[firstKey] = value;\r\n return data;\r\n }\r\n\r\n data[firstKey] = data_set({}, keys.join(\".\"), value);\r\n return data;\r\n}","import { deepCloneWithJson, gettype } from \"..\";\r\n\r\n/**\r\n * 獲取資料\r\n * @param data 資料集{key:value}\r\n * @param key 資料對應的位置 app.column.name\r\n * @param defaultValue 如果取不到值要給予什麼參數,預設 null\r\n * @returns\r\n *\r\n * {a:[{b:a},{b:a}]}\r\n * a.b = [a,a]\r\n */\r\nexport function data_get(data: any, key: string, defaultValue: any = null,): any {\r\n switch (gettype(data)) {\r\n case \"object\":\r\n const coypData = deepCloneWithJson(data);\r\n const keys = key.split('.');\r\n let firstKey = keys.shift();\r\n if (!firstKey) return defaultValue;\r\n if (!(firstKey in coypData)) return defaultValue;\r\n\r\n let rep = coypData[firstKey];\r\n if (keys.length > 0)\r\n rep = data_get(rep, keys.join('.'), defaultValue);\r\n\r\n return rep ?? defaultValue;\r\n case 'undefined':\r\n case 'null':\r\n return defaultValue;\r\n case 'array':\r\n return (data as any[]).map((value: any) => data_get(value, key, defaultValue)) as any;\r\n default:\r\n return data;\r\n }\r\n}","/**\r\n* 透過遞迴複製物件\r\n* @param o \r\n* @returns \r\n*/\r\nexport function recursiveDeepCopy<T = any>(o: T): T {\r\n switch (Object.prototype.toString.apply(o)) {\r\n case \"[object Array]\":\r\n const tempArry: any = [];\r\n (o as Array<any>).forEach(value => {\r\n (tempArry as Array<any>).push(recursiveDeepCopy(value));\r\n })\r\n return tempArry;\r\n case \"[object Object]\":\r\n const tempO: any = {};\r\n Object.keys(o as Object).forEach(key => {\r\n if (Object.prototype.hasOwnProperty.call(o, key))\r\n tempO[key] = recursiveDeepCopy((o as { [_: string]: any })[key]);\r\n })\r\n return tempO;\r\n default:\r\n return o;\r\n }\r\n}","/**\r\n * 判斷資料是否為空值\r\n * @param data \r\n * @returns \r\n */\r\nexport function emptyData(data: any) {\r\n return typeof data === \"undefined\" || data === null\r\n}","/**\r\n * 回傳物體的型態\r\n * @param obj \r\n * @returns \r\n */\r\nexport function gettype<T = any>(obj: T) {\r\n switch (true) {\r\n case obj instanceof Array:\r\n return 'array';\r\n case obj instanceof Date:\r\n return 'date';\r\n case obj === null:\r\n return 'null';\r\n default:\r\n return typeof obj;\r\n }\r\n}","import { gettype, recursiveDeepCopy } from \"..\";\r\n\r\n/**\r\n * 兩個參數的合併(只能是物件或者陣列)\r\n * 如果是空值就回傳空物件\r\n * @param value1 \r\n * @param value2 \r\n * @returns \r\n */\r\nexport function parameterMerge(value1?: any, value2?: any) {\r\n const type1 = gettype(value1);\r\n const type2 = gettype(value2);\r\n\r\n switch (true) {\r\n case (type1 === \"undefined\" || type1 === \"null\") && !!value2:\r\n return value2;\r\n case (type2 === \"undefined\" || type2 === \"null\") && !!value1:\r\n return value1;\r\n case type1 === \"array\" && type1 === type2:\r\n return [...value1, ...value2];\r\n case type1 === \"object\" && type1 === type2:\r\n return Object.assign(recursiveDeepCopy(value1), value2);\r\n default:\r\n return {};\r\n }\r\n}","import { gettype } from \"..\";\r\n\r\n/**\r\n * 回傳物件的第一個值或者空值\r\n * @param arr\r\n * @returns\r\n */\r\nexport function head<T = any>(arr: Array<T>): T | null {\r\n if (gettype(arr) !== 'array') return null;\r\n return arr.length > 0 ? arr[0] : null;\r\n}\r\n\r\n\r\n","/**\r\n * 透過 JSON 複製物件\r\n * @param obj 要複製的物件\r\n * @returns\r\n */\r\nexport function deepCloneWithJson<T>(obj: T) {\r\n return JSON.parse(JSON.stringify(obj));\r\n }\r\n ","type TremoveValeu = string | number\r\n\r\n/**\r\n * 移除陣列某一個位置的值\r\n * @param arr 陣列\r\n * @param item 要移除的值\r\n * @returns\r\n */\r\nexport function remove(arr: TremoveValeu[], item: TremoveValeu) {\r\n if (arr.length === 0) return [];\r\n\r\n const index = arr.indexOf(item);\r\n if (index === -1) return arr;\r\n\r\n return [...arr.slice(0, index), ...arr.slice(index + 1)];\r\n}","/**\r\n * 尋找字串內是否有符合的值,並移除後回傳結果\r\n * @param str 字串\r\n * @param key 要搜尋的文字\r\n * @returns [boolean,string]\r\n */\r\nexport function searchInStr(str: string, key: string): [boolean, string] {\r\n return str.indexOf(key) === -1 ? [false, str] : [true, str.replace(key, '')];\r\n}","/**\r\n * 駝峰轉小寫+convert(default:底線)\r\n * @param str\r\n * @returns\r\n */\r\nexport function strToConvert(str: string, convert: string = \"_\") {\r\n return str.replace(/\\B([A-Z])/g, `${convert}$1`).toLowerCase();\r\n}","/**\r\n * 底線轉駝峰\r\n * @param str\r\n * @returns\r\n */\r\nexport function strToHump(str: string) {\r\n if (str.startsWith('_')) str = str.slice(1);\r\n\r\n return str.replace(/([^_])(?:_+([^_]))/g, function ($0, $1, $2) {\r\n return $1 + $2.toUpperCase();\r\n });\r\n}","import { gettype } from \"../gettype/gettype\";\r\n\r\n/**\r\n * 物件深度合併\r\n * @param target\r\n * @param sources\r\n * @returns\r\n */\r\nexport function deepAssign(...param: ({ [_: string]: any } | undefined)[]) {\r\n let temp: any[] = param.filter(v => gettype(v) === \"object\")\r\n if (temp.length < 1) return {};\r\n \r\n let result = Object.assign({}, ...temp);\r\n\r\n for (let item of temp) {\r\n for (const [idx, val] of Object.entries<any>(item)) {\r\n if (gettype(val) === \"object\") {\r\n result[idx] = deepAssign(result[idx], val);\r\n }\r\n }\r\n }\r\n return result;\r\n}\r\n","/**\r\n * 多欄位排序\r\n * @param sort \r\n * @returns \r\n */\r\nexport function fieldSorter(sort: {\r\n isDesc?: boolean,\r\n fields: {\r\n key: string,\r\n isNumber?: boolean,\r\n isDesc?: boolean\r\n }[]\r\n}) {\r\n return (a: { [_: string]: any }, b: { [_: string]: any }) => {\r\n const data = sort.fields\r\n .map(filed => {\r\n let dir = 1;\r\n if (filed.isDesc) {\r\n dir = -1;\r\n }\r\n\r\n let valueA = a[filed.key];\r\n let valueB = b[filed.key];\r\n\r\n if (!valueA || !valueB)\r\n return 0;\r\n\r\n if (filed.isNumber) {\r\n valueA = Number(valueA);\r\n valueB = Number(valueB);\r\n\r\n if (Number.isNaN(valueA) || Number.isNaN(valueB))\r\n return 0\r\n }\r\n\r\n return valueA > valueB ? dir : valueA < valueB ? -(dir) : 0;\r\n }).reduce((p, n) => p ? p : n, 0);\r\n\r\n if (sort.isDesc)\r\n data * -1;\r\n\r\n return data;\r\n };\r\n};","/**\r\n * 取得區間的數值\r\n * @param start 開始時間\r\n * @param stop 結束時間\r\n * @param step 間隔\r\n * @returns \r\n */\r\nexport function range(start: number, stop: number, step: number) {\r\n const range = { length: (stop - start) / step + 1 };\r\n\r\n return Array.from(range, (_, i) => start + (i * step));\r\n};"],"mappings":"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","names":["range"]}
1
+ {"version":3,"sources":["../src/help/index.ts","../src/help/data_set/data_set.ts","../src/help/data_get/data_get.ts","../src/help/recursiveDeepCopy/recursiveDeepCopy.ts","../src/help/emptyData/emptyData.ts","../src/help/gettype/gettype.ts","../src/help/parameterMerge/parameterMerge.ts","../src/help/head/head.ts","../src/help/deepCloneWithJson/deepCloneWithJson.ts","../src/help/remove/remove.ts","../src/help/searchInStr/searchInStr.ts","../src/help/strToConvert/strToConvert.ts","../src/help/strToHump/strToHump.ts","../src/help/deepAssign/deepAssign.ts","../src/help/fieldSorter/fieldSorter.ts","../src/help/range/range.ts"],"sourcesContent":["export * from './data_set/data_set';\r\nexport * from './data_get/data_get';\r\nexport * from './recursiveDeepCopy/recursiveDeepCopy';\r\nexport * from './emptyData/emptyData';\r\nexport * from './gettype/gettype';\r\nexport * from './parameterMerge/parameterMerge';\r\nexport * from './head/head';\r\nexport * from './deepCloneWithJson/deepCloneWithJson';\r\nexport * from './remove/remove';\r\nexport * from './searchInStr/searchInStr';\r\nexport * from './strToConvert/strToConvert';\r\nexport * from './strToHump/strToHump';\r\nexport * from './deepAssign/deepAssign';\r\nexport * from './fieldSorter/fieldSorter';\r\nexport * from \"./range/range\";","/**\r\n * 動態設定多層物件的參數\r\n * @param data 被設定的物件\r\n * @param key 位置\r\n * @param value 參數\r\n * @returns \r\n */\r\nexport function data_set(data: any, key: string, value: any) {\r\n const keys = key.split(\".\");\r\n const firstKey = keys.shift();\r\n if (!firstKey) return data;\r\n\r\n if (keys.length < 1) {\r\n data[firstKey] = value;\r\n return data;\r\n }\r\n\r\n data[firstKey] = data_set({}, keys.join(\".\"), value);\r\n return data;\r\n}","import { deepCloneWithJson, gettype } from \"..\";\r\n\r\n/**\r\n * 獲取資料\r\n * @param data 資料集 {key:value} \r\n * @param key 資料對應的位置 app.column.name\r\n * @param defaultValue 如果取不到值要給予什麼參數,預設 null\r\n * @returns\r\n *\r\n * {a:[{b:a},{b:a}]}\r\n * a.b = [a,a]\r\n */\r\nexport function data_get<T = any>(data: { [key: string]: any } | any[] | null | undefined, key: string, defaultValue: any = null,): T {\r\n switch (gettype(data)) {\r\n case \"object\":\r\n const coypData = deepCloneWithJson(data);\r\n const findKey = Object.keys(coypData).find((k) => key.startsWith(k));\r\n if (!findKey) return defaultValue;\r\n\r\n key = findKey === key ? '' : key.replace(findKey + '.', '');\r\n if (key === '') return coypData[findKey];\r\n\r\n return data_get(coypData[findKey], key, defaultValue);\r\n\r\n case 'undefined':\r\n case 'null':\r\n return defaultValue;\r\n case 'array':\r\n return (data as any[]).map((value: any) => data_get(value, key, defaultValue)) as any;\r\n default:\r\n return data as any;\r\n }\r\n}","/**\r\n* 透過遞迴複製物件\r\n* @param o \r\n* @returns \r\n*/\r\nexport function recursiveDeepCopy<T = any>(o: T): T {\r\n switch (Object.prototype.toString.apply(o)) {\r\n case \"[object Array]\":\r\n const tempArry: any = [];\r\n (o as Array<any>).forEach(value => {\r\n (tempArry as Array<any>).push(recursiveDeepCopy(value));\r\n })\r\n return tempArry;\r\n case \"[object Object]\":\r\n const tempO: any = {};\r\n Object.keys(o as Object).forEach(key => {\r\n if (Object.prototype.hasOwnProperty.call(o, key))\r\n tempO[key] = recursiveDeepCopy((o as { [_: string]: any })[key]);\r\n })\r\n return tempO;\r\n default:\r\n return o;\r\n }\r\n}","/**\r\n * 判斷資料是否為空值\r\n * @param data \r\n * @returns \r\n */\r\nexport function emptyData(data: any) {\r\n return typeof data === \"undefined\" || data === null\r\n}","/**\r\n * 回傳物體的型態\r\n * @param obj \r\n * @returns \r\n */\r\nexport function gettype<T = any>(obj: T) {\r\n switch (true) {\r\n case obj instanceof Array:\r\n return 'array';\r\n case obj instanceof Date:\r\n return 'date';\r\n case obj === null:\r\n return 'null';\r\n default:\r\n return typeof obj;\r\n }\r\n}","import { gettype, recursiveDeepCopy } from \"..\";\r\n\r\n/**\r\n * 兩個參數的合併(只能是物件或者陣列)\r\n * 如果是空值就回傳空物件\r\n * @param value1 \r\n * @param value2 \r\n * @returns \r\n */\r\nexport function parameterMerge(value1?: any, value2?: any) {\r\n const type1 = gettype(value1);\r\n const type2 = gettype(value2);\r\n\r\n switch (true) {\r\n case (type1 === \"undefined\" || type1 === \"null\") && !!value2:\r\n return value2;\r\n case (type2 === \"undefined\" || type2 === \"null\") && !!value1:\r\n return value1;\r\n case type1 === \"array\" && type1 === type2:\r\n return [...value1, ...value2];\r\n case type1 === \"object\" && type1 === type2:\r\n return Object.assign(recursiveDeepCopy(value1), value2);\r\n default:\r\n return {};\r\n }\r\n}","import { gettype } from \"..\";\r\n\r\n/**\r\n * 回傳物件的第一個值或者空值\r\n * @param arr\r\n * @returns\r\n */\r\nexport function head<T = any>(arr: Array<T>): T | null {\r\n if (gettype(arr) !== 'array') return null;\r\n return arr.length > 0 ? arr[0] : null;\r\n}\r\n\r\n\r\n","/**\r\n * 透過 JSON 複製物件\r\n * @param obj 要複製的物件\r\n * @returns\r\n */\r\nexport function deepCloneWithJson<T>(obj: T) {\r\n return JSON.parse(JSON.stringify(obj));\r\n }\r\n ","type TremoveValeu = string | number\r\n\r\n/**\r\n * 移除陣列某一個位置的值\r\n * @param arr 陣列\r\n * @param item 要移除的值\r\n * @returns\r\n */\r\nexport function remove(arr: TremoveValeu[], item: TremoveValeu) {\r\n if (arr.length === 0) return [];\r\n\r\n const index = arr.indexOf(item);\r\n if (index === -1) return arr;\r\n\r\n return [...arr.slice(0, index), ...arr.slice(index + 1)];\r\n}","/**\r\n * 尋找字串內是否有符合的值,並移除後回傳結果\r\n * @param str 字串\r\n * @param key 要搜尋的文字\r\n * @returns [boolean,string]\r\n */\r\nexport function searchInStr(str: string, key: string): [boolean, string] {\r\n return str.indexOf(key) === -1 ? [false, str] : [true, str.replace(key, '')];\r\n}","/**\r\n * 駝峰轉小寫+convert(default:底線)\r\n * @param str\r\n * @returns\r\n */\r\nexport function strToConvert(str: string, convert: string = \"_\") {\r\n return str.replace(/\\B([A-Z])/g, `${convert}$1`).toLowerCase();\r\n}","/**\r\n * 底線轉駝峰\r\n * @param str\r\n * @returns\r\n */\r\nexport function strToHump(str: string) {\r\n if (str.startsWith('_')) str = str.slice(1);\r\n\r\n return str.replace(/([^_])(?:_+([^_]))/g, function ($0, $1, $2) {\r\n return $1 + $2.toUpperCase();\r\n });\r\n}","import { gettype } from \"../gettype/gettype\";\r\n\r\n/**\r\n * 物件深度合併\r\n * @param target\r\n * @param sources\r\n * @returns\r\n */\r\nexport function deepAssign(...param: ({ [_: string]: any } | undefined)[]) {\r\n let temp: any[] = param.filter(v => gettype(v) === \"object\")\r\n if (temp.length < 1) return {};\r\n \r\n let result = Object.assign({}, ...temp);\r\n\r\n for (let item of temp) {\r\n for (const [idx, val] of Object.entries<any>(item)) {\r\n if (gettype(val) === \"object\") {\r\n result[idx] = deepAssign(result[idx], val);\r\n }\r\n }\r\n }\r\n return result;\r\n}\r\n","/**\r\n * 多欄位排序\r\n * @param sort \r\n * @returns \r\n */\r\nexport function fieldSorter(sort: {\r\n isDesc?: boolean,\r\n fields: {\r\n key: string,\r\n isNumber?: boolean,\r\n isDesc?: boolean\r\n }[]\r\n}) {\r\n return (a: { [_: string]: any }, b: { [_: string]: any }) => {\r\n const data = sort.fields\r\n .map(filed => {\r\n let dir = 1;\r\n if (filed.isDesc) {\r\n dir = -1;\r\n }\r\n\r\n let valueA = a[filed.key];\r\n let valueB = b[filed.key];\r\n\r\n if (!valueA || !valueB)\r\n return 0;\r\n\r\n if (filed.isNumber) {\r\n valueA = Number(valueA);\r\n valueB = Number(valueB);\r\n\r\n if (Number.isNaN(valueA) || Number.isNaN(valueB))\r\n return 0\r\n }\r\n\r\n return valueA > valueB ? dir : valueA < valueB ? -(dir) : 0;\r\n }).reduce((p, n) => p ? p : n, 0);\r\n\r\n if (sort.isDesc)\r\n data * -1;\r\n\r\n return data;\r\n };\r\n};","/**\r\n * 取得區間的數值\r\n * @param start 開始時間\r\n * @param stop 結束時間\r\n * @param step 間隔\r\n * @returns \r\n */\r\nexport function range(start: number, stop: number, step: number) {\r\n const range = { length: (stop - start) / step + 1 };\r\n\r\n return Array.from(range, (_, i) => start + (i * step));\r\n};"],"mappings":"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","names":["range"]}
package/package.json CHANGED
@@ -1,35 +1,35 @@
1
- {
2
- "name": "@aimidy/util",
3
- "version": "1.0.12",
4
- "description": "",
5
- "main": "./dist/index.js",
6
- "module": "./dist/index.mjs",
7
- "types": "./dist/index.d.ts",
8
- "files": [
9
- "dist"
10
- ],
11
- "scripts": {
12
- "build": "tsup",
13
- "test": "jest",
14
- "push": "npm publish --access=public"
15
- },
16
- "repository": {
17
- "type": "git",
18
- "url": "https://github.com/aimidy/util"
19
- },
20
- "keywords": [
21
- "demo",
22
- "typescript",
23
- "npm"
24
- ],
25
- "author": "aimidy",
26
- "license": "ISC",
27
- "devDependencies": {
28
- "@types/jest": "^29.5.12",
29
- "jest": "^29.7.0",
30
- "ts-jest": "^29.1.2",
31
- "ts-node": "^10.9.2",
32
- "tsup": "^8.0.2",
33
- "typescript": "^5.4.5"
34
- }
1
+ {
2
+ "name": "@aimidy/util",
3
+ "version": "1.0.13",
4
+ "description": "",
5
+ "main": "./dist/index.js",
6
+ "module": "./dist/index.mjs",
7
+ "types": "./dist/index.d.ts",
8
+ "files": [
9
+ "dist"
10
+ ],
11
+ "scripts": {
12
+ "build": "tsup",
13
+ "test": "jest",
14
+ "push": "npm publish --access=public"
15
+ },
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "https://github.com/aimidy/util"
19
+ },
20
+ "keywords": [
21
+ "demo",
22
+ "typescript",
23
+ "npm"
24
+ ],
25
+ "author": "aimidy",
26
+ "license": "ISC",
27
+ "devDependencies": {
28
+ "@types/jest": "^29.5.14",
29
+ "jest": "^29.7.0",
30
+ "ts-jest": "^29.2.5",
31
+ "ts-node": "^10.9.2",
32
+ "tsup": "^8.3.5",
33
+ "typescript": "^5.7.2"
34
+ }
35
35
  }