O nativo do JS não fornece funções convenientes do formatador e parece caótico e difícil de ler por splicing de personagens, e é muito inconveniente de usar. Pessoalmente, sinto que a sintaxe fornecida em C# é mais útil, como:
String.Format ("Bem -vindo para aprender '{0}', '{0}' é incrível, você {1} it!", "JavaScript", "Love");Esse método de substituição seqüencial é relativamente claro e, ao substituir o mesmo conteúdo, você pode salvar a situação de aprovar parâmetros duplicados. A seguir, é apresentada a versão simples de implementação do JS (sem testes rígidos):
(function(exports) {exports.format = function(){var args = Array.prototype.slice.call(arguments),sourceStr = args.shift();function execReplace(text,replacement,index){return text.replace(new RegExp("//{"+index+"//}",'g'),replacement);}return args.reduce (Execreplace, Sourcestr);}}) (window.utils = window.utils || {}); console.log (utils.format ("Bem -vindo para aprender '{0}', '{0}' é incrível, você vai {1} it!", "Javascript" ");A chave é esta frase:
args.Reduce (Execreplace, Sourcestr);
Aqui, a função de redução da matriz é usada. Reduce e Reduteright são funções recém -adicionadas no ES5. Os parâmetros desta função são reduzidos (retorno de chamada, InitialValue). Retorno de chamada recebe 4 parâmetros:
AnteriorValue:
Ao atravessar a primeira entrada da função de retorno de chamada, se o InitialValue for especificado, o InitialValue será usado diretamente, se nenhum primeiro elemento da matriz for especificado, o primeiro elemento da matriz será usado.
O valor do segundo e subsequente Traversals é o resultado da travessia anterior.
O resultado retornado pela última travessia será usado como o valor de retorno da função de redução.
CurrentValue: o item atual que ele atravessou
ÍNDICE: O índice do item atual na matriz
Array: Array original
Em cada execução no Execreplace, o resultado após a substituição anterior ser usada como a sequência de substituição original, o índice do item atual é usado como conteúdo a ser substituído e itera, por sua vez, para finalmente concluir o conteúdo de substituição.
NOTA: O ReduceRight é basicamente o mesmo que reduzir a função, exceto que sua ordem de travessia é da direita para a esquerda