數據格式如下:
let arr = [
{
"id": 275,
"name": "測試公司",
"userList": [
{
"id": 697,
"userName": "11111"
}
]
}, {
"id": 327,
"name": "有限公司",
"userList": [
{
"id": 743,
"userName": "張三"
}, {
"id": 744,
"userName": "李四"
}
]
}
];
問題一:動態修改name爲text,userName也修改爲text,userList爲children
處理方法:
方案一:封裝copyTransFunc方法,參數有兩個,一個是arr,一個是數組,數組裏可以配置修改的key和替換的value,支持多個
// 將arr對象中的name鍵改爲text、userName鍵改爲text、userList鍵改爲chilren
console.log(this.copyTransFunc(arr, [{ key: "name", value: "text" }, { key: "userName", value: "text" },{ key: "userList", value: "chilren" }]));
copyTransFunc (obj, typeArr) {
let result;
let toString = Object.prototype.toString;
if (toString.call (obj) === '[object Array]') {
result = [];
for (let i = 0; i < obj.length; i++) {
result[i] = this.copyTransFunc (obj[i], arguments[1])
}
} else if (toString.call (obj) === '[object Object]') {
result = {};
for (let _key in obj) {
if (obj.hasOwnProperty (_key)) {
let flag = 0, _value = null;
for (let j = 0; j < arguments[1].length; j++) {
if (arguments[1][j].key === _key) {
flag = 1;
_value = arguments[1][j].value
}
}
if (flag)
result[_value] = this.copyTransFunc (obj[_key], arguments[1]);
else
result[_key] = this.copyTransFunc (obj[_key], arguments[1])
}
}
} else {
return obj
}
return result
}
方案二:遞歸解決
copyTransFun (arr) {
arr.forEach ((item) => {
if (item.name) {
item.text = item.name;
delete item.name;
}
if (item.userName) {
item.text = item.userName;
delete item.userName;
}
if (item.userList) {
item.children = item.userList;
delete item.userList;
if (item.children.length) {
this.copyTransFun (item.children);
}
}
});
},
方案三:處理兩級情況
//處理只有兩級情況
let col = [];
arr.forEach((item, index) => {
col.push({
id: item.id,
text: item.name,
children: item.userList,
},
);
});
col.forEach((_item, _index) => {
if (_item.children && _item.children.length) {
_item.children.forEach((item, index) => {
if (Object.getOwnPropertyNames(item).length) {
item.id = item.id;
item.text = item.userName;
}
})
}
});
交流
可添加qq羣共同進階學習: 進軍全棧工程師疑難解 羣號: 856402057
對前端技術保持學習愛好者。我會經常分享自己所學所看的乾貨,在進階的路上,共勉!歡迎關注公衆號共同學習。