问题描述
师姐参加阿里的笔试,也跟着去学学名企的编程题都考什么?
如下格式的一个字符串,要转化成一个有层级关系的对象。
[abc[def[ghi]]]
{
value: "abc",
child: {
value: "def",
child: {
value: "ghi"
}
}
}
分析
实现
/**
* 字符串转换
* @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;
};
细节实现
以下是一些对上面用到的方法实现,有兴趣的可以看看,都是一些基本操作:
/**
* 获取该字符串相关的有效值
* @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
了。
当经历的比较多时,框架仅仅是我们的工具,随着现在越来越优秀的设计模式与设计思想,我们学习框架的成本越来越低。
当发现框架千篇一律时,没事想想算法会让我们的思路焕然一新。编程,算法是内功,框架是技能。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。