UNPKG

3.13 kBJavaScriptView Raw
1import { parse, parseToData, getData } from 'MATCH/parse';
2import {
3 isFun,
4 isObj,
5 isArray
6} from 'LIB/util';
7import { pushStack, removeStack, cleanStack, updateStack } from 'MATCH/stack';
8import { filter, filterEmpty } from 'MATCH/filter';
9import autoComplete from 'MATCH/auto-complete';
10import config , { extendConfig , extendTmpConfig , restoreConfig, changeFilterDefaultObject , filterDefaultObject } from 'MATCH/config';
11import 'LIB/polyfill';
12
13
14/**
15 * 对象映射
16 */
17export const matchObject = function (
18 data: any,
19 obj: object
20) {
21 let exp;
22 let result = {};
23
24 for (let i in obj) {
25 exp = parse(obj[i], i);
26 result[i] = parseToData(exp, data, result);
27 filter(i, result);
28 changeFilterDefaultObject(false);
29 }
30
31 return filterEmpty(result);
32};
33
34/**
35 * 数组映射
36 */
37export const matchArray = function (
38 data: any,
39 arr: Array
40) {
41 let exp;
42 let result = [];
43
44 try {
45 if (arr.length === 1) {
46 // 直接映射 data
47 for (let i = 0; i < data.length; i++) {
48 result[i] = matchObject(data[i], arr[0]);
49 }
50 }
51
52 if (arr.length === 2) {
53 // 映射data的对象
54 data = getData(data, arr[0]);
55 // data = data[arr[0]];
56 for (let i = 0; i < data.length; i++) {
57 result[i] = matchObject(data[i], arr[1]);
58 }
59 }
60 } catch (e) {
61 if (config.filterDefaultArray) return;
62 }
63
64 return result;
65};
66
67const match = {
68 parse: (
69 combineData: object | Array,
70 keyData: object | Array
71 ) => {
72 let matchData = {};
73 let result;
74
75 if (isObj(keyData)) {
76 result = matchObject(combineData, keyData);
77 }
78
79 if (isArray(keyData)) {
80 result = matchArray(combineData, keyData);
81 }
82
83 autoComplete(result, combineData);
84
85 restoreConfig();
86
87 return result;
88 },
89 parseConfig (
90 combineData: object | Array,
91 keyData: object | Array,
92 configTmp: object
93 ) {
94 // 代表此次match使用传入的config
95 const configCache = Object.assign({}, config);
96 let data;
97
98 extendConfig(configTmp);
99 data = this.parse(combineData, keyData);
100 extendConfig(configCache);
101
102 return data;
103 },
104 tmpConfig (
105 configTmp: object
106 ) {
107 extendTmpConfig(configTmp);
108
109 return this;
110 },
111 register: (
112 obj: object | Array,
113 name: string
114 ) => {
115 pushStack({
116 value: obj,
117 name: name
118 });
119 },
120 update: (
121 obj: object | Array,
122 name: string
123 ) => {
124 updateStack(obj, name);
125 return this;
126 },
127 // 移除register的内容
128 remove: (
129 name: string
130 ) => {
131 removeStack(name);
132 return this;
133 },
134 removeAll: (
135 ) => {
136 cleanStack();
137
138 return this;
139 },
140 config: (
141 obj: object
142 ) => {
143 extendConfig(obj);
144
145 return this;
146 }
147};
148
149export default match;