博客 / 詳情

返回

阿里筆試 字符串轉化為層級對象

問題描述

師姐參加阿里的筆試,也跟着去學學名企的編程題都考什麼?

如下格式的一個字符串,要轉化成一個有層級關係的對象。

[abc[def[ghi]]]
{
    value: "abc",
    child: {
        value: "def",
        child: {
            value: "ghi"
        }
    }
}

分析

clipboard.png

實現

/**
 * 字符串轉換
 * @param  {[type]} string 原始字符串
 * @return {[type]}        帶有層級關係的對象
 */
self.transfer = function(string) {
    // 去除首尾字符
    var newStr = self.removeStartAndEnd(string);
    // 獲取本字符串的有效值
    var value  = self.getValue(newStr);

    // 初始化嵌套變量
    var nestOrNot = false;
    var child = {};
    
    // 構造返回對象
    var object = {
        value: value
    };

    // 如果嵌套,遞歸獲取屬性
    if (self.isNest(newStr)) {
        nestOrNot = true;
        child = self.transfer(self.cutSonString(newStr));
    }

    // 如果嵌套,返回對象添加child屬性
    if (nestOrNot) {
        object.child = child;
    }
    
    return object;
};

clipboard.png

細節實現

以下是一些對上面用到的方法實現,有興趣的可以看看,都是一些基本操作:

/**
 * 獲取該字符串相關的有效值
 * @param  {[type]} string 原始字符串
 * @return {[type]}        該字符串中的有效值
 */
self.getValue = function(string) {
    if (string.indexOf('[') !== -1) {
        return string.substring(0, string.indexOf('['))
    } else {
        return string;
    }
};

/**
 * 判斷是否嵌套
 * @param  {[type]}  string 字符串
 * @return {Boolean}        嵌套true/false
 */
self.isNest = function(string) {
    if (string.indexOf('[') !== -1) {
        return true;
    } else {
        return false;
    }
};

/**
 * 去除字符串首尾的字符
 * @param  {[type]} string 原始字符串
 * @return {[type]}        去除首尾字符字符串
 */
self.removeStartAndEnd = function(string) {
    return string.substring(1, string.length - 1);
};

/**
 * 切割子串
 * @param  {[type]} string 原始字符串
 * @return {[type]}        嵌套的子串
 */
self.cutSonString = function(string) {
    return string.substring(string.indexOf('['), string.lastIndexOf(']') + 1);
};

總結

也算是看過不少筆試題,覺得名企的編程題是最有意義的,多去看看這些名企的題,也能對自身有所提升。

但是不推薦看小公司的筆試題,這些小公司為了顯示自己的水平高,然後就把題出的特別難,感覺也沒多大的提升,什麼動態規劃啥的,不會還是不會,筆試就一個小時,要是能寫出來估計就去Google了。

當經歷的比較多時,框架僅僅是我們的工具,隨着現在越來越優秀的設計模式與設計思想,我們學習框架的成本越來越低。

當發現框架千篇一律時,沒事想想算法會讓我們的思路煥然一新。編程,算法是內功,框架是技能。

clipboard.png

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.