结果集转置工具类
export const handleArrayTransform = (resultSet = [], horizons = [], contents = [], verticals = []) => {
if (resultSet.length === 0) {
return []
}
if (contents.length === 0) {
console.warn('contents为空,未提供转置列数组!')
return []
}
if (verticals.length === 0) {
console.warn('verticals 值不能为空!')
return []
}
verticals.forEach(vertical => {
if (!resultSet[0].hasOwnProperty(vertical)) {
console.warn('结果集未包含 {} 列!', vertical)
return []
}
})
resultSet = JSON.parse(JSON.stringify(resultSet))
const transformKeys = []
const result = []
for (const row of resultSet) {
const key = horizons.map(column => row[column]).join('--')
let idx = transformKeys.indexOf(key)
if (idx < 0) {
const newRow = {}
horizons.forEach(column => {
newRow[column] = row[column]
})
idx = transformKeys.push(key) - 1
result[idx] = newRow
}
contents.forEach(column => {
const newColumn = verticals.reduce((accumulator, vertical) => accumulator + row[vertical] + '_', '') + column
if (row[column] !== undefined) {
result[idx][newColumn] = row[column]
}
})
}
return result
}
工具具体使用
import { handleArrayTransform } from '@/utils/dataTransposition'
this.dataListChannelsBuy = handleArrayTransform(arr, ['management_type_id'], ['buy_num'], ['data_date'])
效果图
初始数组:

转置后的数组:

el-table动态获取字段名称:
