以下程式碼純屬個人寫著玩。為了加深理解和熟悉字串提供的方法的思路。但是我發現我寫完之後還是忘了。沒啥鳥用。分享給大家指點。
大家說如果面試的話,讓面試者寫一個字串底層方法實現思路。是否能快速寫出來。
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;
}
}
}
複製程式碼