21

问题描述

师姐参加阿里的笔试,也跟着去学学名企的编程题都考什么?

如下格式的一个字符串,要转化成一个有层级关系的对象。

[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


张喜硕
2.1k 声望423 粉丝

浅梦辄止,书墨未浓。