問題描述
師姐參加阿里的筆試,也跟着去學學名企的編程題都考什麼?
如下格式的一個字符串,要轉化成一個有層級關係的對象。
[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了。
當經歷的比較多時,框架僅僅是我們的工具,隨着現在越來越優秀的設計模式與設計思想,我們學習框架的成本越來越低。
當發現框架千篇一律時,沒事想想算法會讓我們的思路煥然一新。編程,算法是內功,框架是技能。