JoeZhao

跨出界

Hey, I’m JoeZhao, a software engineer, and a gamer.

將 JSON 底線改為 camp

這是碰到的一道面試題,記錄一下。

問題是:如何將 json 數據的所有 key 從下劃線改為駝峰命名法

下面是答題過程中的實現方法:

const testData = {
    a_bbb: 123,
    a_g: [1, 2, 3, 4],
    a_d: {
        s: 2,
        s_d: 3
    },
    a_f: [1, 2, 3, {
        a_g: 5
    }],
    a_d_s: 1
}

/**
 * _w 的形式轉成 W
 */
function toCame(str) {
    return str.replace(/\_(\w)/g, function(a, b) {
        return b.toUpperCase();
    });
}

/**
 * 將一個json數據的所有key從下劃線改為駝峰命名法
 * 
 * @param {object | array} value 待處理對象或數組
 * @returns {object | array} 處理後的對象或數組
 */
function mapKeysToCamelCase(data) {
    if(data instanceof Array) {
        data.forEach(function(v, index) {
            mapKeysToCamelCase(v);
        });
    } else if(data instanceof Object) {
        Object.keys(data).forEach(function(v, index) {
            var newValue = toCame(v);
            console.info(newValue);
            
            // 如果名稱一致,說明可能不存在轉化情況
            if(newValue != v) {
                data[newValue] = data[v];
                delete data[v];
            }

            // 遞歸
            mapKeysToCamelCase(data[newValue]);
        });
    }

    return data;
}

console.log(mapKeysToCamelCase(testData))

進一步思考:

  1. 這是直接在原有對象上操作的,如何複製一個新的對象呢?
  2. ES 對於 Object 的循環應該有更好的方法,如何利用新特徵?

... 待續

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。