判断是否不是空数组
export function isNotEmptyArray ( arr : Array< any> ) {
return Array. isArray ( arr) && arr. length > 0
}
处理数据,把空数组变成null
export function postData ( arr : Array< any> , childrenName : string) {
if ( isNotEmptyArray ( arr) ) {
arr. forEach ( ( x ) => {
if ( isNotEmptyArray ( x[ childrenName] ) ) {
postData ( x[ childrenName] , childrenName)
} else {
x[ childrenName] = null
}
} )
}
return arr
}
对数组的某些字段求和
export function sumToList ( origin : Array< any> , fieldList : Array< string> ) {
let obj : { [ index: string] : number } = { }
fieldList. forEach ( ( x : string) => {
obj[ x] = 0
} )
return origin. reduce ( ( a, b ) => {
for ( const key in a) {
a[ key] += b[ key] ? Number ( b[ key] ) : 0
}
return a
} , obj)
}
从数组中查找返回需要的字段
export function ArrayFindItemValue ( {
origin,
fieldName,
needFieldName,
value,
equal,
} : API . ArrayFindItemValue) {
switch ( equal) {
case '===' :
return origin. find ( ( x ) => x[ fieldName] === value) ?. [ needFieldName]
default :
return origin. find ( ( x ) => x[ fieldName] == value) ?. [ needFieldName]
}
}
改变某一行某个字段
export function changeFieldData ( {
origin,
fieldName,
fieldValue,
changeFieldName,
changeFieldvalue,
childrenName,
} : API . changeFieldData) {
function loop ( arr : Array< any> ) {
arr. forEach ( ( x ) => {
if ( x[ fieldName] === fieldValue) {
x[ changeFieldName] = changeFieldvalue
}
if ( isNotEmptyArray ( x[ childrenName] ) ) {
loop ( x[ childrenName] )
}
} )
}
loop ( origin)
return origin
}
改变某一行数据
export function changeRowData ( {
origin,
fieldName,
rowData,
childrenName,
} : API . changeRowData) {
function loop ( arr : Array< any> ) {
arr. forEach ( ( x, i ) => {
if ( x[ fieldName] === rowData[ fieldName] ) {
arr[ i] = rowData
}
if ( isNotEmptyArray ( x[ childrenName] ) ) {
loop ( x[ childrenName] )
}
} )
}
loop ( origin)
return origin
}
根据一个数组转换成下拉列表需要的options antd proSelect
export function ArrayToOptions ( {
origin,
labelName,
valueName,
showAll,
} : API . ArrayToOptions) {
const result = origin. map ( ( item ) => {
let name = ''
if ( typeof labelName === 'function' ) {
name = labelName ( item)
} else {
name = item[ labelName]
}
return {
... item,
label : name,
value : item[ valueName] ,
}
} )
if ( showAll) {
return [ { label : '全部' , value : '' } , ... result]
}
return result
}
根据一个数组转换成ENUM类型 antd proSelect
export function ArrayToEnum ( {
origin,
labelName,
valueName,
showAll,
} : API . ArrayToEnum) {
let obj : { [ index: string] : any | { [ index: string] : any } } = showAll
? { '' : { text : '全部' } }
: { }
origin. forEach ( ( item ) => {
let name = ''
let value = ''
if ( typeof labelName === 'function' ) {
name = labelName ( item)
} else {
name = item[ labelName]
}
if ( typeof valueName === 'function' ) {
value = valueName ( item)
} else {
value = item[ valueName]
}
if ( item && Object. keys ( item) . length > 2 ) {
obj[ value] = { }
for ( const key in item) {
if ( [ 'color' , 'status' ] . includes ( key) ) {
obj[ value] [ key] = item[ key]
}
}
obj[ value] [ 'text' ] = name
} else {
obj[ value] = name
}
} )
return obj
}
对象数组去重 适用于对象数组和treeData
export function ObjectArrayUnique ( {
origin,
fieldName = 'id' ,
childrenName = 'children' ,
} : API . ObjectArrayUnique) : Array< any> {
let map = new Map ( )
let result : Array< any> = [ ]
origin. forEach ( ( x : any) => {
if ( isNotEmptyArray ( x[ childrenName] ) ) {
x[ childrenName] = ObjectArrayUnique ( {
origin : x[ childrenName] ,
fieldName : fieldName,
childrenName : childrenName,
} )
}
if ( ! map. get ( x[ fieldName] ) ) {
result. push ( x)
map. set ( x[ fieldName] , 1 )
}
} )
return result
}
value数组去重
export function ValueArrayUnique ( arr : Array< any> ) : Array< any> {
let map = new Map ( )
let result : Array< any> = [ ]
arr. forEach ( ( x ) => {
if ( ! map. get ( x) ) {
result. push ( x)
map. set ( x, 1 )
}
} )
return result
}
全部代码
export function isNotEmptyArray ( arr : Array< any> ) {
return Array. isArray ( arr) && arr. length > 0
}
export function postData ( arr : Array< any> , childrenName : string) {
if ( isNotEmptyArray ( arr) ) {
arr. forEach ( ( x ) => {
if ( isNotEmptyArray ( x[ childrenName] ) ) {
postData ( x[ childrenName] , childrenName)
} else {
x[ childrenName] = null
}
} )
}
return arr
}
export function sumToList ( origin : Array< any> , fieldList : Array< string> ) {
let obj : { [ index: string] : number } = { }
fieldList. forEach ( ( x : string) => {
obj[ x] = 0
} )
return origin. reduce ( ( a, b ) => {
for ( const key in a) {
a[ key] += b[ key] ? Number ( b[ key] ) : 0
}
return a
} , obj)
}
export function ArrayFindItemValue ( {
origin,
fieldName,
needFieldName,
value,
equal,
} : API . ArrayFindItemValue) {
switch ( equal) {
case '===' :
return origin. find ( ( x ) => x[ fieldName] === value) ?. [ needFieldName]
default :
return origin. find ( ( x ) => x[ fieldName] == value) ?. [ needFieldName]
}
}
export function changeFieldData ( {
origin,
fieldName,
fieldValue,
changeFieldName,
changeFieldvalue,
childrenName,
} : API . changeFieldData) {
function loop ( arr : Array< any> ) {
arr. forEach ( ( x ) => {
if ( x[ fieldName] === fieldValue) {
x[ changeFieldName] = changeFieldvalue
}
if ( isNotEmptyArray ( x[ childrenName] ) ) {
loop ( x[ childrenName] )
}
} )
}
loop ( origin)
return origin
}
export function changeRowData ( {
origin,
fieldName,
rowData,
childrenName,
} : API . changeRowData) {
function loop ( arr : Array< any> ) {
arr. forEach ( ( x, i ) => {
if ( x[ fieldName] === rowData[ fieldName] ) {
arr[ i] = rowData
}
if ( isNotEmptyArray ( x[ childrenName] ) ) {
loop ( x[ childrenName] )
}
} )
}
loop ( origin)
return origin
}
export function ArrayToOptions ( {
origin,
labelName,
valueName,
showAll,
} : API . ArrayToOptions) {
const result = origin. map ( ( item ) => {
let name = ''
if ( typeof labelName === 'function' ) {
name = labelName ( item)
} else {
name = item[ labelName]
}
return {
... item,
label : name,
value : item[ valueName] ,
}
} )
if ( showAll) {
return [ { label : '全部' , value : '' } , ... result]
}
return result
}
export function ArrayToEnum ( {
origin,
labelName,
valueName,
showAll,
} : API . ArrayToEnum) {
let obj : { [ index: string] : any | { [ index: string] : any } } = showAll
? { '' : { text : '全部' } }
: { }
origin. forEach ( ( item ) => {
let name = ''
let value = ''
if ( typeof labelName === 'function' ) {
name = labelName ( item)
} else {
name = item[ labelName]
}
if ( typeof valueName === 'function' ) {
value = valueName ( item)
} else {
value = item[ valueName]
}
if ( item && Object. keys ( item) . length > 2 ) {
obj[ value] = { }
for ( const key in item) {
if ( [ 'color' , 'status' ] . includes ( key) ) {
obj[ value] [ key] = item[ key]
}
}
obj[ value] [ 'text' ] = name
} else {
obj[ value] = name
}
} )
return obj
}
export function ObjectArrayUnique ( {
origin,
fieldName = 'id' ,
childrenName = 'children' ,
} : API . ObjectArrayUnique) : Array< any> {
let map = new Map ( )
let result : Array< any> = [ ]
origin. forEach ( ( x : any) => {
if ( isNotEmptyArray ( x[ childrenName] ) ) {
x[ childrenName] = ObjectArrayUnique ( {
origin : x[ childrenName] ,
fieldName : fieldName,
childrenName : childrenName,
} )
}
if ( ! map. get ( x[ fieldName] ) ) {
result. push ( x)
map. set ( x[ fieldName] , 1 )
}
} )
return result
}
export function ValueArrayUnique ( arr : Array< any> ) : Array< any> {
let map = new Map ( )
let result : Array< any> = [ ]
arr. forEach ( ( x ) => {
if ( ! map. get ( x) ) {
result. push ( x)
map. set ( x, 1 )
}
} )
return result
}