2017-06-28 11 views
0

Ich möchte Variablen in einer Zeichenfolge wie console.log wird ersetzt. Was ich erreichen möchte ist so etwas wie diese:Ersetzen Sie Variablen in Zeichenfolgen wie console.log

let str = 'My %s is %s.'; 

replaceStr(string, /* args */) { 
    // I need help with defining this function 
}; 

let newStr = replaceStr(str, 'name', 'Jackie'); 
console.log(newStr); 
// output => My name is Jackie. 

/* 
    This is similar to how console.log does: 
    // console.log('I\'m %s.', 'Jack'); 
    // => I'm Jack. 
*/ 

ich nicht in der Lage bin, um herauszufinden, wie das zu tun. Jede Hilfe wird sehr geschätzt.

Vielen Dank.

function replaceStr(string, ...placeholders) { 
    while (placeholders.length > 0) { 
     string = string.replace('%s', placeholders.shift()); 
    } 

    return string; 
} 

EDIT:

+1

Gibt es einen Grund, warum Sie nicht verwenden [ 'template literals'] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Template_literals)? –

+0

@ChristopherMoore Was ich erreichen möchte, ist nicht, was Template-Literale bieten. –

Antwort

2

Sie könnten Prototyp es dem String Objekt. Etwas wie dieses:

String.prototype.sprintf = function() { 
    var counter = 0; 
    var args = arguments; 

    return this.replace(/%s/g, function() { 
     return args[counter++]; 
    }); 
}; 

let str = 'My %s is %s.'; 
str = str.sprintf('name', 'Alex'); 
console.log(str); // 'My name is Alex' 
+0

Ja, das ist ein sehr schöner Weg. –

+0

Ich bin froh, dass ich ein bisschen helfen konnte :) – lexith

1

Sie können Spread-Operator (ES6) verwenden Basierend auf lexith Antwort können wir die explizite Schleife vermeiden:

function replaceStr(string, ...placeholders) { 
    var count = 0; 
    return string.replace(/%s/g,() => placeholders[count++]); 
} 
+0

Ich dachte darüber nach, aber ich hoffte auf eine Methode ohne Schleifen zu verwenden. Ist das überhaupt möglich? –

+0

Es funktioniert nur mit ES6 – Ajay

+0

@anonymous Gruppe nicht wirklich ... –

0

Wenn Sie hoffen, möchten Sie benutzerdefinierte Logger-Funktion haben.
console.log kann ersetzen %s, mit unten Ansatz Ihre benutzerdefinierte Funktion bekommt volle Feature-Set von console.log und es ist effizienter.

function myLogger() { 
    if(logEnabled) { 
     // you can play with arguments for any customisation's 
     // arguments[0] is first string 
     // prepend date in log arguments[0] = (new Date().toString()) + arguments[0] ; 
     console.log.apply(console, arguments); 
    } 
} 
Verwandte Themen