/* * @LastEditTime: 2020-09-22 14:58:51 * @LastEditors: jinxiaojian */ interface fieldObj { type: string, label: string, value: string } /** * 对后端返回的不规则数组进行整形, 获取select options * @param arr 要整形数组 * @param field field中type:数组是否为对象数组,label:label对应变量名,value:value对应变量名 */ const getOptions = (arr: any[], field: fieldObj) => { const newArr: Object[] = [] arr.forEach(x => { const obj: { label: string, value: string } = { label: '', value: '' } if (field.type === 'obj') { obj.label = x[field.label] obj.value = x[field.value] } else { obj.label = x obj.value = x } newArr.push(obj) }) return newArr } /** * 对象转数组 * @param obj 要转化的对象 * @param sort 制定依据排序数组 */ const objToArr = (obj: any = {}, sort?: string[]) => { var array: any[] = []; let newObj: any = undefined; if (Array.isArray(sort)) { sort.forEach((x, i) => { newObj = {} newObj.key = x; newObj.value = obj[x]; array[i] = newObj }) } else { for (var key in obj) { newObj = {} newObj.key = key; newObj.value = obj[key]; array.push(newObj); } } return array; }; /** * 数组转对象 * @param arr 要转化的数组 * @param key 指定是否需要在要转化的对象数组中制定生成的属性 */ const arrToObj = (arr = [], key?: string) => { if (key) { const obj = {} arr.forEach(x => { obj[x[key]] = x }) return obj } return Object.assign({}, arr); } /** * 多层对象转单层 * @param obj 为多层对象 */ const oneLevel = (obj: any = {}) => { const newObj: any = {}; function toEndPoint(ele: any, father: string) { if (Object.prototype.toString.call(ele) === '[object Object]') { for (let x in ele) { toEndPoint(ele[x], `${father ? father + '___' : ''}${x}`) } } else { newObj[father] = ele } } toEndPoint(obj, '') return newObj; }; export { getOptions, objToArr, arrToObj, oneLevel }