計算機科学のブログ

変数と文字列 テンプレートリテラル タグ付きテンプレートリテラル、カスタム処理

入門JavaScriptプログラミング (JD Isaacks(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT1(変数と文字列)、LESSON 7(テンプレートリテラル)、7.5(練習問題)、Q7-1の解答を求めてみる。

コード

function withProps() {
    let stringParts = arguments[0],
        values = [].slice.call(arguments, 1);
    return stringParts.reduce(
        function (memo, nextPart) {
            let value = values.shift();
            if (value.constructor === Object) {
                value = Object.keys(value)
                    .map(function (key) {
                        return `${key}="${value[key]}"`;
                    }).join(' ');
            }
            return memo + value + nextPart;
        }
    );
}

const props = {
    src: 'http://fillmurray.com/100/100',
    alt: 'Bill Murray'
};
const img = withProps`<img ${props}>`;

console.log(img);

入出力結果(Terminal、Zsh)

% node sample1.js
<img src="http://fillmurray.com/100/100" alt="Bill Murray">
%