2017-06-28 8 views
0

console.logのような文字列で変数を置換したいと思います。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. 
*/ 

私はそれを行う方法を把握することはできませんよ。 私は何を達成したいことは、このようなものです。どんな助けでも大歓迎です。

ありがとうございます。

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

    return string; 
} 

EDITは:lexithの答えに基づいて、我々は明示的なループを回避できます。

+1

あなたは[ 'テンプレートliterals'](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Template_literals)を使用していない理由はありますか? –

+0

@ChristopherMoore私が達成したいのは、テンプレートリテラルが提供するものではありません。 –

答えて

2

あなたはそれがStringオブジェクトにプロトタイプを作成できます。このようなもの:

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

はい、これはとても良い方法です。 –

+0

うれしい私は少し助けることができる:) – lexith

1

あなたはスプレッド演算子(ES6)を使用することができます

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

私はそれを考えていましたが、私はループを使わない方法を望んでいました。それも可能ですか? –

+0

これはES6でのみ動作します – Ajay

+0

@anonymousグループ... –

0

希望する場合は、カスタムロガー機能が必要です。
console.log%sに置き換えることができます。以下のアプローチでは、カスタム関数はconsole.logの全機能セットとそのより効率的なセットを取得します。

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); 
    } 
} 
関連する問題