js更改對象中屬性名的方法

數據格式如下:

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

對前端技術保持學習愛好者。我會經常分享自己所學所看的乾貨,在進階的路上,共勉!歡迎關注公衆號共同學習。

                                                    

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章