2016-04-08 9 views
0

Werfen Sie einen Blick auf den Code unten, es ist ziemlich selbsterklärend. Wie ändere ich die Funktion "replaceAt", um die gewünschten Ergebnisse zu erhalten?Einfache Erweiterung Native 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

Können Sie näher erläutern, wie Ihr Code nicht funktioniert? Was hast du erwartet und was ist eigentlich passiert? Wenn Sie eine Ausnahme erhalten haben, buchen Sie die Zeile, auf der sie aufgetreten ist, und die Ausnahmedetails. Bitte [bearbeiten] Sie diese Details oder wir können Ihnen möglicherweise nicht weiterhelfen. –

+0

Sehen Sie sich die Kommentare in den letzten zwei Zeilen an. – Ivannnnn

+0

Sie haben uns das zur Verfügung gestellt, was Sie _expect_, aber dann was _happen_? –

Antwort

4

Sie können nicht, Zeichenfolgen sind unveränderlich.

Ein anderer Ansatz wäre, ein Objekt oder Array zurückzugeben, das das ersetzte Zeichen und die neue Zeichenfolge enthält. Dann weisen die Werte auf die ‚x‘ Variablen und ‚str‘ jeweils:

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); 

jedoch das ES6 Merkmal ‚Destrukturierung‘ nutzen, können Sie in der Tat zu einem oneliner bringen:

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

Wie kann die native js Funktion Shift etwas ähnliches tun: var fruits = ["Banana", "Orange", "Apple", "Mango"]; var x = fruits.shift(); console.log (Früchte); // gibt ["Orange", "Apple", "Mango"] zurück console.log (x); // gibt 'Banana' zurück – Ivannnnn

+0

Dies liegt daran, dass ein Array veränderbar ist. Sie können ein Array an eine Funktion übergeben und sie ändern (Elemente hinzufügen, löschen usw.). Dadurch wird auch das Array außerhalb der Funktion aktualisiert, da es sich um dieselbe Instanz dieses Arrays handelt. Zeichenketten sind jedoch unveränderlich, Sie können keine Zeichen daraus entfernen und auch keine Zeichen hinzufügen. Funktionen wie .substring(), .toUpperCase(), etc. ändern die Quellzeichenfolge nicht: Sie geben eine komplett neue Zeichenkette zurück. –

+0

Ah, ok. Danke für die Erklärung. Upvoted. – Ivannnnn

Verwandte Themen