String操做方法底層實現!!!

如下代碼純屬我的寫着玩。爲了加深理解和熟悉字符串提供的方法的思路。可是我發現我寫完以後仍是忘了。沒啥鳥用。分享給你們指點。面試

你們說若是面試的話,讓面試者寫一個字符串底層方法實現思路。是否能快速寫出來。數組

1:charAt

/*
* charAt()方法
* 功能  :  返回指定位置的字符
* 參數  :  傳遞一個下標
* 官方使用
* var str = "abcdefg";
* str.charAt(2);	        //c
* str.charAt("CCCC");		//輸入其餘字符都默認返回下標爲0的字符   輸出a
* str.charAt(-1);		//傳遞負值返回空字符串
*/

String.prototype.ycCharAt = function(){
	var parma = arguments[0];
	var returnStr = parma >= 0 ? this[parma] : !isNaN(parma) ?  "" : this[0];
	return returnStr;
}
複製代碼


2:concat

/*
* concat()方法
* 功能  :  用於鏈接兩個字符串
* 參數  :  傳遞一個字符串
* 官方使用
* var str = "abcdefg";
* str.concat(123);			//"abcdefg123"
* str.concat([1,2,3]);			//"abcdefg1,2,3"
* str.concat({name:"123"});		//"abcdefg[object Object]"
*/
String.prototype.ycConcat = function(){
	return this + arguments[0];
}
複製代碼


二:三個字符串截取方法實現

1:slice

/*
* slice() 方法
* 功能  :  截取字符串。
* 參數  :  第一個參數是子字符串的開始位置,第二個參數是子字符串的結束位置(不含該位置)
* 注意  : 
* 	1:第一個參數不能大於第二個參數的值  不然返回空
* 	2:若是參數是負值。當參數是負數時候  字符串長度會默認加上負數 
* 官方使用
* var str = "abcdefg";
* str.slice(1);					//"bcdefg"
* str.slice(1,4);				//"bcd"
* str.slice(1,-4);				//結束位置就至關於 字符串長度7+-4 =  3 === slice(1,3)  = bc
* str.slice(-3,-4);				//""
*/
String.prototype.ycSlice = function(){
	var _str = "";
	//獲取開始位置
	var _start = arguments[0] >= 0 ? arguments[0] : this.length+arguments[0] ;
	//獲取結束位置
	var _end = arguments[1] >= 0 ? arguments[1] : this.length+arguments[1] ;
	for(var i=0;i<this.length;i++){
		if(i >= _start  && i < _end){
			_str += this[i];
		}
	}
	return _str;
}
複製代碼


2:substring

/*
* substring() 方法
* 功能  :  截取字符串。若是參數是負值。當參數是負數或者時候  字符串長度會默認加上負數 
* 參數  :  第一個參數是子字符串的開始位置,第二個參數是子字符串的結束位置(不含該位置)
* 注意	: 
* 	1:第一個參數不能大於第二個參數的值  不然返回空
* 	2:當傳遞不是數字則默認轉換爲0
* 官方使用
* var str = "abcdefg";
* str.substring(1);					//"bcdefg"
* str.substring(1,4);				//"bcd"
* str.substring(1,-4);				//結束位置就至關於 字符串長度substring(1,0)  = b
* str.substring(-3,-4);				//""
*/
String.prototype.ycSubstring = function(){
	var _str = "";
	//獲取開始位置
	var _start = arguments[0] >= 0 ? arguments[0] : 0 ;
	//獲取結束位置
	var  _end  = arguments[1] >= 0 ? arguments[1] : 0 ;
	for(var i=0;i<this.length;i++){
		if(i >= _start  && i < _end){
			_str += this[i];
		}
	}
	return _str;
}
複製代碼


3:substr

/*
* substr() 方法
* 功能  :  截取字符串。若是參數是負值。當參數是負數或者時候  字符串長度會默認加上負數 
* 參數  :  第一個參數是子字符串的開始位置,第二個參數是子字符串的長度
* 注意	: 
* 		1:第一個參數是負值。當參數是負數時候  字符串長度會默認加上負數 
* 		2:第二個參數當傳遞不是數字則默認轉換爲0
* 官方使用
* var str = "abcdefg";
* str.substr(1);					//"bcdefg"
* str.substr(1,4);					//"bcd"
* str.substr(1,-4);					//結束位置就至關於 字符串長度substring(1,0)  = b
* str.substr(-3,-4);				//""
*/
String.prototype.ycSubstr = function(){
	var _str = "";
	//獲取開始位置
	var _start = arguments[0] >= 0 ? arguments[0] : this.length+arguments[0];
	//獲取結束位置
	var  _end  = arguments[1] >= 0 ? arguments[1] : 0 ;
	for(var i=0;i<this.length;i++){
		if(i >= _start  && i < (_start+_end)){
			_str += this[i];
		}
	}
	return _str;
}
複製代碼


三:檢索匹配字符串對應的下標

1:indexOf

/*
* indexOf() 方法
* 功能  :  返回指定字符在當前字符串第一次出現的位置。
* 參數  :  第一個參數:匹配的字符串   第二個參數 :從哪一個位置開始匹配
* 官方使用
* var str = "abcdefga";
* str.indexOf("a");				//"0"
* str.indexOf("a",2);				//"7"
* str.indexOf(1);				//-1
*/

String.prototype.ycIndexOf = function(){
	var _parma = arguments[0];
	var _start = arguments[1] || 0;
	var _index = -1;
	for(var i=_start;i<this.length;i++){
		if(this[i] == _parma){
			_index = i;
			return _index;
		}
	}
}
複製代碼

2:lastIndexOf

/*
* lastIndexOf() 方法
* 功能  :  返回當前字符串最後一個匹配的字符索引
* 參數  :  第一個參數:匹配的字符串   第二個參數 :從哪一個位置開始匹配
* 官方使用
* var str = "abcdefga";
* str.lastIndexOf("a");					//"7"
* str.lastIndexOf("a",2);				//"0"
* str.lastIndexOf(1);					//-1
*/

String.prototype.ycLastIndexOf = function(){
	var _parma = arguments[0];
	var _start = arguments[1] ||  this.length;
	var _index = -1;
	for(var i=_start;i >= 0;i--){
		if(this[i] == _parma){
			_index = i;
			return _index;
		}
	}
}
複製代碼


後續有時間了 可能會繼續寫下去。發現把字符串和數組的底層方法本身實現一遍的話。再去作什麼數組去重 排序。。。思路天然而然就來了。

相關文章
相關標籤/搜索