问题:下面是要处理的数据结构,就是username相同admin_role_name的合并起来,放到一个数组admin_role_names中
let data = [{
username: 'admin',
name: '管理员',
disable: 0,
admin_role_name: '知识库管理员'
},
{
username: 'xiaoming',
name: '111',
disable: 0,
admin_role_name: '超级管1理员'
},
{
username: 'xiaoming',
name: '111',
disable: 0,
admin_role_name: '知识库管理员'
},
{
username: 'xiaohua',
name: '小花',
disable: 0,
admin_role_name: '知识库管理员'
},
{
username: 'dalao',
name: '大佬',
disable: 0,
admin_role_name: '知识库管理员'
},
{
username: 'dalao',
name: '大佬',
disable: 0,
admin_role_name: '超级管理员'
}]
处理方法
let len = data.length
let tempArr = []
for (let i = 0; i < len; i++) {
let item = data[i]
let name = item.username
if (tempArr[name] === undefined) {
tempArr[name] = {}
tempArr[name].username = item.username
tempArr[name].name = item.name
tempArr[name].disable = item.disable
tempArr[name].admin_role_names = []
tempArr[name].admin_role_names.push(item.admin_role_name)
} else {
tempArr[name].admin_role_names.push(item.admin_role_name)
}
}
console.log(tempArr)
console.log(Object.values(tempArr))
封装成的工具类
/**
* @description 对具有相同属性的对象的合并另一个属性并存在于一个新的数组的函数
* @function
* @param {Array} arr - 需要整理的数组
* @param {String} uniqueName - 相同的属性名
* @param {String} needMergeName - 需要合并的属性名
* @param {String} mergedArr - 最后合并到的数组名
*/
function mergeArr (arr, uniqueName, needMergeName, mergedArr) {
let len = arr.length
let finalArr = []
let arrValues = Object.keys(arr[0])
console.log(arrValues)
for (let i = 0; i < len; i++) {
let item = arr[i]
let name = arr[i][uniqueName]
if (finalArr[name] === undefined) {
finalArr[name] = {}
for (let j = 0; j < arrValues.length; j++) {
console.log(arrValues[j])
finalArr[name][arrValues[j]] = item[arrValues[j]]
}
finalArr[name][mergedArr] = []
finalArr[name][mergedArr].push(item[needMergeName])
} else {
finalArr[name][mergedArr].push(item[needMergeName])
}
}
return Object.values(finalArr)
}
结果
网友评论