31 lines
944 B
TypeScript
31 lines
944 B
TypeScript
import isArray from './is-array';
|
|
import isFunction from './is-function';
|
|
import groupBy from './group-by';
|
|
|
|
/**
|
|
* 将数据分组成 map
|
|
* @param data
|
|
* @param condition
|
|
*/
|
|
export default function groupToMap(data: any, condition: string[] | string | ((row: any) => string)) {
|
|
if (!condition) {
|
|
return {
|
|
0: data,
|
|
};
|
|
}
|
|
if (!isFunction(condition)) {
|
|
// 如果是字符串,则按照 a*b 风格成数组
|
|
const paramscondition = isArray(condition) ? condition : condition.replace(/\s+/g, '').split('*');
|
|
condition = function (row) {
|
|
let unique = '_'; // 避免出现数字作为Key的情况,会进行按照数字的排序
|
|
|
|
// 根据字段列表的值,拼接成 key
|
|
for (let i = 0, l = paramscondition.length; i < l; i++) {
|
|
unique += row[paramscondition[i]] && row[paramscondition[i]].toString();
|
|
}
|
|
return unique;
|
|
};
|
|
}
|
|
return groupBy(data, condition);
|
|
}
|