| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- export function transformSomeToArray(source: any) {
- if (typeof source === 'string')
- return source.split(',');
- if (typeof source === 'object') {
- if (source instanceof Array)
- return source;
- else {
- const arr = [];
- for (const key in source)
- arr.push(source[key]);
- return arr;
- }
- }
- return source;
- }
- export interface FindAPropCondition {
- /**
- * 匹配类型
- * startWith: (需要name)匹配以指定字符串开头的属性值
- * endWith: (需要name)匹配以指定字符串结尾的属性值
- * contain: (需要name)匹配包含指定字符串的属性值
- * match: (需要name)匹配完全等于指定字符串的属性值
- * selectOnlyOne: 如果只有一个key,仅返回此key的属性值
- * selectAtLestOne: 如果没有匹配到任何属性值,返回keys中第一个
- */
- type: 'startWith'|'endWith'|'contain'|'match'|'selectOnlyOne'|'selectAtLestOne';
- name?: string;
- }
- export function findAProp(source: Record<string, any>, matchConditions: FindAPropCondition[]) {
- // 获取source对象的所有键
- const keys = Object.keys(source);
- if (matchConditions.some(cond => cond.type === 'selectOnlyOne')) {
- // 如果只有一个key,仅返回此key的属性值
- if (keys.length === 1)
- return source[keys[0]];
- }
- // 遍历所有匹配条件
- for (const condition of matchConditions) {
- switch (condition.type) {
- case 'startWith':
- if (condition.name) {
- // 查找以指定字符串开头的属性值
- for (const key of keys) {
- if (key.startsWith(condition.name)) {
- return source[key];
- }
- }
- }
- break;
- case 'endWith':
- if (condition.name) {
- // 查找以指定字符串开头的属性值
- for (const key of keys) {
- if (key.endsWith(condition.name)) {
- return source[key];
- }
- }
- }
- break;
- case 'match':
- if (condition.name) {
- // 查找完全等于指定字符串的属性值
- for (const key of keys) {
- if (key === condition.name) {
- return source[key];
- }
- }
- }
- break;
- case 'contain':
- if (condition.name) {
- // 查找包含指定字符串的属性值
- for (const key of keys) {
- if (key.includes(condition.name)) {
- return source[key];
- }
- }
- }
- break;
- }
- }
- if (matchConditions.some(cond => cond.type === 'selectAtLestOne')) {
- // 如果没有匹配到任何属性值,返回keys中第一个
- if (keys.length > 0) {
- return source[keys[0]];
- }
- }
-
- // 如果所有条件都未匹配到,返回undefined
- return undefined;
- }
|