2016-04-08 88 views
0

看看下面的代碼,它是不言自明的。如何修改'replaceAt'函數以獲得所需的結果?簡單擴展原生JS

String.prototype.replaceAt = function (at) { 
    return this.substring(0, at) + this.substring(at+1, this.length); 
} 

var str = "webmaster"; 

var x = str.replaceAt(2); 
console.log(x); // should return "b" 
console.log(str); // should return "wemaster" 
+0

你能否詳細說明你的代碼如何工作?你在期待什麼,究竟發生了什麼?如果您遇到異常,請發佈它發生的行和異常詳細信息。請[編輯]這些細節或我們可能無法提供幫助。 –

+0

看看最後兩行中的註釋。 – Ivannnnn

+0

您向我們提供了什麼_expect_,但那麼_happened_? –

回答

4

你不能,字符串是不可變的。

另一種方法是返回包含替換字符的對象或數組,以及新字符串。然後將值賦給變量「x」和「海峽」,分別爲:

String.prototype.replaceAt = function (at) { 
    return { 
     x: this.substring(at+1, at), 
     str: this.substring(0, at) + this.substring(at+1, this.length) 
    } 
}; 

var str = "webmaster"; 
var result = str.replaceAt(2); 
var x = result.x; 
str = result.str; 

console.log(x); 
console.log(str); 

然而,利用ES6功能「解構」,你其實可以把它歸結爲一個oneliner:

String.prototype.replaceAt = function (at) { 
    return [ 
     this.substring(at+1, at), 
     this.substring(0, at) + this.substring(at+1, this.length) 
    ] 
}; 

var str = "webmaster"; 
[x, str] = str.replaceAt(2); 

console.log(x); 
console.log(str); 
+0

原生js函數如何移位可以做類似的事情:var fruits = [「Banana」,「Orange」,「Apple」,「Mango」]; var x = fruits.shift(); console.log(fruits); //返回[「Orange」,「Apple」,「Mango」] console.log(x); //返回'香蕉' – Ivannnnn

+0

這是因爲數組是可變的。 您可以將數組傳遞給函數並對其進行修改(添加,刪除項目等)。 這也將更新函數之外的數組,因爲它是該數組的同一個實例。 但是,字符串是不可變的,您不能從中刪除字符,也不能爲其添加字符。像.substring(),.toUpperCase()等函數不會修改源字符串:它們會返回一個全新的字符串。 –

+0

啊,好的。感謝您的解釋。 Upvoted。 – Ivannnnn